随着互联网和计算机技术的不断发展和深入应用,TCP/IP网络协议已成为当前最为普及、最为常见的一种网络协议。对于程序员来说,了解TCP服务器的工作原理以及掌握如何编写TCP服务器将有助于提升自己的技术实力。本篇文章将带领读者了解如何在C语言的环境下轻松编写TCP服务器。
TCP/IP网络协议简介
TCP/IP是指传输控制协议/因特网协议,它是互联网协议族中最基础的协议。TCP、IP是两个互不依赖的协议,其中,TCP提供了数据的可靠传输,IP负责数据的传递。二者共同组成了TCP/IP网络协议。
TCP服务器工作原理
TCP服务器是一种基于TCP协议的网络服务,它可以通过电子设备在客户端上提供数据服务。运行TCP服务器的主机可以同时与多个客户端建立连接,客户端可以随时向TCP服务器发起请求。TCP服务器会根据客户端的请求来写入响应的数据,并返回给客户端。TCP服务器具有以下特点:
1.基于TCP协议进行响应,具有高度的可靠性;
2.支持多线程同时处理多个客户端的请求;
3.使用固定的端口并等待客户端连接,服务器端运行不间断。
C语言开发环境准备
开发TCP服务器前需要准备的工具和环境:
1.操作系统:Linux或Windows系统;
2.开发平台:DevC++6.0、Visual Studio等;
3.必备库文件:Winsock。
注:Winsock是Windows系统中提供的与网络编程相关的API接口库。
使用C语言编写TCP服务器
下面用C语言来编写一个简单的TCP服务器,并通过客户端连接测试该服务器的功能是否正常。
1.创建一个C语言工程文件
打开开发平台,然后创建一个新的C语言工程(如使用Dev-C++软件,则选择File->New->Project->Console Application),创建成功后得到两个文件:mn.c和mn.o。
2.添加Winsock库并设置相关参数
添加Winsock库文件,并在代码开头添加如下语句:
#include
#pragma comment(lib, “ws2_32.lib”)
#define PORT 8080 //指定端口号
3.初始化Winsock环境
int mn()
{
WSADATA wsa;
SOCKET s, client_sock;
struct sockaddr_in server, client;
char buf[1024] ;
int numrecv ;
printf(“\nWelcome to Socket Server\n\n”);
// 初始化Winsock
printf(“\nInitialising Winsock…”);
if (WSAStartup(MAKEWORD(2,2), &wsa) != 0)
{
printf(“Fled. Error Code : %d”,WSAGetLastError());
return 1;
}
printf(“Initialised!\n”);
// 创建Socket
if((s = socket(AF_INET , SOCK_STREAM, 0 )) == INVALID_SOCKET)
{
printf(“Could not create socket : %d” , WSAGetLastError());
return 1;
}
printf(“Socket created!\n”);
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(PORT);
// Bind
if( bind(s,(struct sockaddr *)&server , sizeof(server)) == SOCKET_ERROR)
{
printf(“Bind fled with error code : %d” , WSAGetLastError());
return 1;
}
puts(“Bind done”);
// Listen to incoming connections
listen(s , 3);
//Accept and incoming connection
puts(“Wting for incoming connections…”);
while(1)
{
int c = sizeof(struct sockaddr_in);
//accept connection from an incoming clients
client_sock = accept(s , (struct sockaddr *)&client, &c);
if (client_sock == INVALID_SOCKET)
{
printf(“accept fled with error code : %d” , WSAGetLastError());
return 1;
}
printf(“Connection accepted from %s:%d\n”,
inet_ntoa(client.sin_addr), ntohs(client.sin_port));
//Reply to the client
while(1)
{
memset(buf, 0, sizeof(buf));
numrecv = recv(client_sock, buf, sizeof(buf), 0);
if (numrecv
{
printf(“Client disconnected\n”);
break;
}
printf(“Client: %s\n”, buf);
if (send(client_sock, buf, numrecv, 0) == SOCKET_ERROR)
{
printf(“send fled with error code : %d”, WSAGetLastError());
}
}
closesocket(client_sock);
}
closesocket(s);
WSACleanup();
return 0;
}
4.运行服务端程序
将代码保存为server.c文件,并编译运行该程序(使用Dev-C++软件,F11进行编译,F9运行程序)。若一切顺利,则应该会在程序执行前打印出“Opening Sockets…”字样,表明程序已启动并处于监听状态。
5.使用客户端连接测试服务器程序
在Windows系统的命令行程序中使用telnet测试服务器程序是否可用。打开cmd窗口,输入“telnet localhost 8080”并回车,若连接成功,则会在客户端界面上看到“Welcome to Socket Server”字样,并在服务器端输出“Connection accepted from xxx.xxx.xxx.xxx:50866”的字样。此时,在客户端上输入任意字符串并回车,服务器端会重新输出该字符串。
相关问题拓展阅读:
- 用C语言写一段代码,与192.168.1.1的tcp80端口建立连接
用C语言写一段代码,与192.168.1.1的tcp80端口建立连接
很早以前写的一段示例代码,希望对你有帮助
//windows TCP Client
# include “winsock2.h”
void main(void)
{
WSADATA wsaData;
SOCKET s;
SOCKADDR_IN ServerAddr;
int Port = 80;
//初始化Windows Socket 2.2
虚液
WSAStartup(MAKEWORD(2,2),wsaData);
// 创建一个新的Socket来连悄碰接服务器
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// 填写客户端地址信息
// 端口为80
// 服务启誉谈器
IP地址
为”192.168.1.1″,注意使用
inet_addr
将IP地址转换为网络格式
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(Port);
ServerAddr.sin_addr.s_addr = inet_addr(“192.168.1.1”);
// 向服务器发出连接请求
connect(s, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr));
// 新的连接建立后,就可以互相通信了,在这个简单的例子中,我们直接关闭连接,
// 并关闭监听Socket,然后退出
应用程序
closesocket(s);
// 释放Windows Socket DLL的相关资源
WSACleanup();
}
c tcp服务器编写的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c tcp服务器编写,学习C语言,轻松编写TCP服务器,用C语言写一段代码,与192.168.1.1的tcp80端口建立连接的信息别忘了在本站进行查找喔。