Windows Sockets网络编程(3)WSAEventSelect模型开发

摘要:WSAEventSelect模型是非阻塞的,该模型允许在一个或者多个套接字上接收以事件为基础的网络事件通知。Windows Sockets应用程序在创建套接字后,调用WSAEventSelect()函数,将一个事件对象与网络事件集合关联在一起。当网络事件发生时,应用程序以事件的形式接收网络事件通知。使用这个模型的基本思路是为感兴趣的一组网络事件创建一个事件对象,再调用WSAEventSelect()函数将网络事件和事件对象关联起来。当网络事件发生时,Winsock使相应的事件对象受信,在事件对象上的等待函数就会返回。WSAEventSelect模型简单易用,也不需要窗口环境。该模型唯一的缺点是有最多等待64个事件对象的限制,当套接字连接数量增加时,就必须创建多个线程来处理I/O,也就是所谓的线程池。


目录:

-------------------------------

- 创建TCP链接

- WSACreateEvent函数

- WSAWaitForMultipleEvents函数

- WSAEnumNetworkEvents函数

- 实践1:WASEventSelect模型

- 实践2:TCP Client


1.创建TCP链接

这里不再赘述了,能来到本文的,相信基本功已经不用多讲了。实在不明白的可以阅读《Windows Sockets网络编程(0)TCP In Action》一文,该文详细的叙述了TCP创建的整个过程。

SOCKET socket_listener = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8086);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if (bind(socket_listener, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR){
	closesocket(socket_listener);
	return;
}
listen(socket_listener, SOMAXCONN);//SOMAXCONN = 5

2.WSACreateEvent函数

在调用WSAEventSelect函数之间,必须要先创建事件,否则没法监听。Windows事件对象有两个状态“已触发”和“未触发”,而事件对象的工作模式也有两种“人工重设”以及“自动重设”。WSACreateEvent创建的事件——原始状态是“未触发态”,当事件到来时系统会将其置为已触发态,工作模式是“人工重设”。

WSAEVENT    eventArray[WSA_MAXIMUM_WAIT_EVENTS];//WSA_MAXIMUM_WAIT_EVENTS = 64
SOCKET      sockArray[WSA_MAXIMUM_WAIT_EVENTS];
int nEventTotal = 0;
WSAEVENT event = WSACreateEvent();
WSAEventSelect(socket_listener, event, FD_ACCEPT | FD_CLOSE);
eventArray[nEventTotal] = event;
sockArray[nEventTotal] = 
精通Windows Sockets网络开发——基于Visual C++实现 目 录 第1篇网络开发基础篇 第1章准备开发环境 1.1windows sockets开发概述 1.1.1网络程序开发应用 1.1.2网络程序结构——c/s、b/s 1.1.3网络程序通信基础——网络协议 1.1.4网络程序通信技术——windows sockets介绍 1.2连接网络 1.2.1tcp/ip设置 1.2.2tcp/ip是否工作正常 1.2.3系统与网络适配器间的通信 1.2.4默认网关 1.2.5ping其他计算机ip地址 1.3创建应用程序 1.3.1控制台程序 1.3.2mfc应用程序 1.4调试两个应用程序 1.4.1启动两个工程 1.4.2将一个工程加入到另一个工程空间 1.5配置开发环境 1.6小结 第2章tcp/ip简介 2.1开放系统互连参考模型 2.2tcp/ip协议概述 2.2.1tcp/ip模型 2.2.2udp 2.2.3tcp 2.2.4端口 2.3小结 第3章windows sockets基础 3.1windows sockets 3.1.1应用程序与windows sockets的关系 3.1.2套接字 3.2协议特征 3.2.1面向连接与面向无连接 3.2.2可靠性与次序性 3.2.3面向消息 3.2.4部分消息 3.2.5从容关闭 3.2.6路由选择 3.2.7广播数据 3.3ip定址 3.3.1ip定址 3.3.2字节顺序问题 3.4基本tcp套接字编程 3.4.1wsastartup()函数 3.4.2socket()函数 3.4.3bind()函数 3.4.4listen()函数 3.4.5accept()函数 3.4.6recv()函数 3.4.7send()函数 3.4.8closesocket()函数 3.4.9shutdown()函数 3.4.10connect()函数 3.5tcp示例程序 3.5.1服务器实现 3.5.2客户端实现 3.6基本udp套接字编程 3.6.1recvfrom()函数 3.6.2sendto()函数 3.7udp示例程序 3.7.1服务器实现 3.7.2客户端实现 3.8套接字选项41 3.8.1getsockopt()函数 3.8.2setsockopt()函数 3.8.3sol_socket选项级别 3.9小结 第2篇visual c++网络模式开发篇 第4章阻塞模式开发 第5章非阻塞模式开发 第6章select模型开发 第7章wsaasyncselect模型开发 第8章wsaeventselect模型开发 第9章重叠i/o模型开发 第10章完成端口模型开发
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值