4.3.3事件选择模型
事件选择模型将每个套接字和每个WSAEVENT对象对应起来,并且在注册的时候指定需要关注的哪些网络事件。
缺陷:不能同时处理多个套接字,只能同时处理一个事件对应的套接字;一个线程中处理的套接字有限,一般为64;应用程序中要处理大于64个套接字,必须额外创建线程。
//事件选择TCP服务器端
#include <iostream>
#include <WinSock2.h>
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
int main(int argc, char ** argv)
{
//步骤1:当前应用程序和相应的socket库绑定
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
cout << "WSAStartup Failed!" << endl;
return -1;
}
//步骤2:创建监听套接字和服务器端IP/PORT
SOCKET sockListen = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addr_server;
memset(&addr_server, 0, sizeof(addr_server));
addr_server.sin_family = AF_INET;
addr_server.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY表示绑定电脑上所有网卡IP
addr_server.sin_port = htons(6000);//不能使用公认端口,即端口>= 1024
//步骤3:套接字绑定和监听
bind(sockListen, (