网络编程-TCP编程与TCP并发实现-线程-windows
TCP编程
TCP编程C/S架构
TCP服务器端编程流程
服务器(被动):
- 创建套接字
- 绑定服务器IP,端口
- 将套接字设置为监听状态
- 阻塞等待客户端的连接请求
- 进行通信
- 关闭套接字
所需函数
listen函数
Int listen(int sockfd,int backlog);
注意! 该函数是设定同时连接主机的最大监听个数的。
功能 | 将套接字由主动修改为被动,是操作系统为该套接字设置一个连接队列,用来记录所有连接到该套接字的连接。 |
---|---|
参数 | sockfd 监听套接字 backlog 连接队列的长度 |
返回值 | 成功返回0,失败其他。 |
accept函数
Int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen);
功能 | 从已连接队列中取出一个已经建立的连接,如果没有任何连接可用,则进入睡眠等待(阻塞) |
---|---|
参数 | Sockfd 用于监听的套接字 Cliaddr 用于存放客户端套接字地址结构体 Addrlen 套接字地址结构体长度的地址 |
返回值 | 已连接的套接字 |
源代码
void main() {
//版本初始化
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
printf("版本初始化失败!\n");
return;
}
//第一步,创建套接字并初始化
SOCKET ListenSocket;
if ((ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET) {
printf("套接字打开失败\n");
WSACleanup();
return;
}
//创建服务器端地址结构体
SOCKADDR_IN serveradd;
serveradd.sin_family = AF_INET;
serveradd.sin_port = htons(5150);
serveradd.sin_addr.S_un.S_addr = htonl