c/c++ TcpServer-Select管理模式

本文介绍了C/C++中使用Select模式管理TCP服务器的实现,包括创建监听socket、配置句柄集合以及Select模式的缺点,如性能瓶颈、句柄数量限制和同步I/O问题。
摘要由CSDN通过智能技术生成

Tcp Server

1: 当我们的Server接入一个客户端进来以后,就要管理好负责从客户端来接收数据,但是服务器要对多个客户端从不能一直等待这一个客户端有数据进来;

2: 我们的server还要读写数据,总不能一直等着有新的用户进来;

3: 需要一种方式来管理, select模型来管理我们的Tcp Server;
1> 创建一个句柄集合,这个集合里面有要管理的所有的socket(句柄);
2> 使用select等待这些句柄上面;
3> 监听socket有数据进来了,表示有新的连接;
4> 已经建立好连接的socket,有数据进来了,表示服务器收到了客户端的数据;
5> 如果客户端关闭了socket或断网了select也能监测得到;


Select

1: 创建一个监听socket:
int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s == INVALID_SOCKET) {
return -1;
}
struct sockaddr_in sockaddr;
sockaddr.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”);
sockaddr.sin_family = AF_INET;
sockaddr.sin_port = htons(port);
int ret = bind(s, (const struct sockaddr*)&sockaddr, sizeof(sockaddr));
ret = listen(s, 1);
2: 配置句柄管理集合:
fd_set socket_set;
FD_ZERO(&socket_set);
FD_SET(s, &socket_set);
FD_CLR(sock, socket_set);
FD_ISSET(s, &socket_set)
int ret = select(0, &socket_set, NULL, NULL, NULL);


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//配置windows环境
#ifdef WIN32
#include <WinSock2.h>
#include <Windows.h>
#pragma comment(lib,"WSOCK32.LIB")
#endif // WIN32

/*
Select:
调用select函数,然后任务挂起,等待我们管理的句柄,有事件发生:
1:读数据
2:新的用户进来:
3:关闭

1>准备一个句柄
2>将我们的socket句柄加入到我们这个集合;
3>调用select函数等待在这
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值