WSAEnumNetworkEvents
来源:互联网 发布:智能电视网络错误 编辑:程序博客网 时间:2024/06/05 20:14
做了一个客户端程序连服务器,在线程里面用WSAEventSelect来选择网络事件,实际运行过程中发现客户端对服务器的指令有时根本没反映,(不是每次,只是有时候,但出现频率还是比较高的),我用网络抓包,发现服务器信息已经发到了客户端,但是却没有触发已定义的网络事件了,不知道为什么?请各位帮忙,相关代码如下(省去了具体的数据处理部分),谢谢!!
WSAEVENT Event[1];
WSANETWORKEVENTS NetWorkEvents;
WSAEVENT NewEvent = WSACreateEvent();
int rc = WSAEventSelect(Port->m_CSocket, NewEvent, _READ|FD_WRITE|FD_ACCEPT|FD_CLOSE|FD_CONNECT);
Port->Socket[EventTotal] = Port->m_CSocket;
Event[EventTotal] = NewEvent;
EventTotal++;
while(TRUE)
{
Index = WSAWaitForMultipleEvents(EventTotal,Event,false,1000,false);
Index = Index - WSA_WAIT_EVENT_0;
if((WSA_WAIT_FAILED == Index) || (WSA_WAIT_TIMEOUT == Index))
{
m_uErr = WSAGetLastError();
continue;
}
//判断网络事件
WSAResetEvent(Event);
Index = Index - WSA_WAIT_EVENT_0;
iResult = WSAEnumNetworkEvents(Port->Socket[0],Even[0],&NetWorkEvents);
if(iResult != 0)
{
m_uErr = WSAGetLastError();
continue;
}
//处理网络事件
if(NetWorkEvents.lNetworkEvents & FD_ACCEPT)
{
AfxMessageBox("FD_ACCEPT");
}
//判断是否连接成功
else if(NetWorkEvents.lNetworkEvents & FD_CONNECT)
{
if(NetWorkEvents.iErrorCode[FD_CONNECT_BIT] != 0)
{
AfxMessageBox("FD_CONNECT_Error");
break;
}
//AfxMessageBox("连接成功!");
}
//接受信息
else if(NetWorkEvents.lNetworkEvents & FD_READ)
{
//具体的数据处理
}
else if(NetWorkEvents.lNetworkEvents & FD_WRITE)
{
if(NetWorkEvents.iErrorCode[FD_WRITE_BIT] != 0)
{
AfxMessageBox("FD_WRITE_Error");
break;
}
SetEvent(Port->g_eventSendOk);
}
else if(NetWorkEvents.lNetworkEvents & FD_CLOSE)
{
if(NetWorkEvents.iErrorCode[FD_CLOSE_BIT] != 0)
{
// AfxMessageBox("FD_CLOSE_Error");
//break;
}
}
}
摘自:http://topic.csdn.net/t/20060215/16/4557668.html
- WSAEnumNetworkEvents()
- WSAEnumNetworkEvents
- WSAEnumNetworkEvents
- WSAEnumNetworkEvents Function
- WSACreateEvent(),WSAEventSelect,WSAWaitForMultipleEvents(),WSAEnumNetworkEvents()
- WSACreateEvent(),WSAEventSelect,WSAWaitForMultipleEvents(),WSAEnumNetworkEvents() .
- 一个使用WSAEnumNetworkEvents的代码片段
- 对SPI、IIC、IIS、UART、CAN、SDIO、GPIO的解释
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
- 安装DNN时端口号设定
- js回车事件,js禁止Backspace键,2个页面之间的JS传值,dinq之group by 语法
- 将类转变为对象,取其中需要的值
- WSAEnumNetworkEvents
- jfreechart linux 乱码解决
- 深入理解C语言指针
- /x无法显示一般的空格匹配!
- VC 剪贴板操作
- 获取IP地址
- std::map&&std::set
- 课程类 --Java
- 数论(算法概述)