- 102
- 0
- 约1.17万字
- 约 13页
- 2017-01-24 发布于天津
- 举报
试验6、7WSAeventselectWINSOCKIO模型程序设计
试验6、7 WSAeventselect WINSOCK I/O模型程序设计
通过这次试验,要掌握Wi n s o c k提供了另一个有用的异步I / O模型WSAeventselect WINSOCK I/O模型。和W S A A s y n c S e l e c t模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知。由W S A A s y n c S e l e c t模型采用的网络事件来说,它们均可原封不动地移植到新模型。在用新模型开发的应用程序中,也能接收和处理所有那些事件。该模型最主要的差别在于网络事件会投递至一个事件对象句柄,而非投递至一个窗口例程。由于WSAeventselect WINSOCK I/O模型单线程只能处理64个套接字,要处理大量客户I/O请求,可采用线程池技术来实现。
相关内容说明
简单的WSAeventselect WINSOCK I/O模型程序(64个用户)
// WSAEventSelect文件
#include initsock.h
#include stdio.h
#include iostream.h
#include windows.h
// 初始化Winsock库
CInitSock theSock;
int main()
{
// 事件句柄和套节字句柄表
WSAEVENT eventArray[WSA_MAXIMUM_WAIT_EVENTS];
SOCKET sockArray[WSA_MAXIMUM_WAIT_EVENTS];
int nEventTotal = 0;
USHORT nPort = 4567; // 此服务器监听的端口号
// 创建监听套节字
SOCKET sListen = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(nPort);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if(::bind(sListen, (sockaddr*)sin, sizeof(sin)) == SOCKET_ERROR)
{
printf( Failed bind() \n);
return -1;
}
::listen(sListen, 5);
// 创建事件对象,并关联到新的套节字
WSAEVENT event = ::WSACreateEvent();
::WSAEventSelect(sListen, event, FD_ACCEPT|FD_CLOSE);
// 添加到表中
eventArray[nEventTotal] = event;
sockArray[nEventTotal] = sListen;
nEventTotal++;
// 处理网络事件
while(TRUE)
{
// 在所有事件对象上等待
int nIndex = ::WSAWaitForMultipleEvents(nEventTotal, eventArray, FALSE, WSA_INFINITE, FALSE);
// 对每个事件调用WSAWaitForMultipleEvents函数,以便确定它的状态
nIndex = nIndex - WSA_WAIT_EVENT_0;
for(int i=nIndex; inEventTotal; i++)
{
nIndex = ::WSAWaitForMultipleEvents(1, eventArray[i], TRUE, 1000, FALSE);
if(nIndex == WSA_WAIT_FAILED || nIndex == WSA_WAIT_TIMEOUT)
{
continue;
}
else
{
// 获取到来的通知消息,WSAEnumNetworkEvents函数会自动重置受信事件
WSANETWORKEVENTS event;
::WSAEnumNetworkEvents(sockArray[i], eventArray[i], event);
if(event.lNetworkEvents FD_ACCEPT) // 处理FD_ACCEPT通知消息
{
if(event.iErrorCode[FD_ACCEPT_BIT] == 0)
{
i
您可能关注的文档
最近下载
- GB 50205-2020 钢结构工程施工质量验收标准.docx VIP
- 专业入职offer通知书模板及使用指南.pdf VIP
- 2024年衢州职业技术学院单招职业适应性考试必刷测试卷最新.docx VIP
- 八篇党支部党员在学习贯彻党的创新理论、加强党性锤炼、联系服务群众、发挥先锋模范作用、改作风树新风五个方面202年度个人对照检查.docx VIP
- 水利施工组织设计资料.doc VIP
- 2026中国水溶性肥料市场运营态势与未来发展新动向趋势建议报告.docx
- 2025年化工工程师固定床反应器反应器设计中的商业化专题试卷及解析.pdf VIP
- 2025年互联网营销师区块链营销合作伙伴的选择与生态构建专题试卷及解析.pdf VIP
- 2025年房地产经纪人抵押物灭失、毁损后的处理与登记专题试卷及解析.pdf VIP
- 统编版六年级语文下册课件《文言文二则-两小儿辩日》.pptx VIP
原创力文档

文档评论(0)