老大们救我,我没辄了!5天了没人理我,再来碰碰运气,好心的老大,侠义的老大....
一个客户端程序。
问题是:单步调试状态下一切正常。在windows环境中似乎卡在WSAWaitForMultipleEvents函数,接收不到任何数据。sniffer的结果表明,卡在这里,也没有数据。但是在bcb的单步调试状态下,又一切正常,能收到想得到的数据。
老大们看看程序错在那里?我都郁闷了一个星期了。救救我,老大。
//建立socket,事件对象等等,是照抄《windows网络编程技术》第8章例子。然后进入循环
while(!end)
{
//Index = WSAWaitForMultipleEvents(EventTotal,Event,false,WSA_INFINITE,false);
if((Index = WSAWaitForMultipleEvents(EventTotal,Event,false,1000,false))==WSA_WAIT_TIMEOUT)continue;
//开始以为是数据发的太快,后来发现不是这里的毛病。但在单步调试状态,若走的太快(按住F8不动),也是在这里卡住不动,接收不到数据,但稍慢一点,就能收到数据
WSAEnumNetworkEvents(Socket[Index-WSA_WAIT_EVENT_0],Event[Index-WSA_WAIT_EVENT_0],&networkevents);
//-------for connect------------------------------------
if(networkevents.lNetworkEvents & FD_CONNECT)
{
if(networkevents.iErrorCode[FD_CONNECT_BIT] != 0)
{
...
break;
}
if(send(Socket[Index-WSA_WAIT_EVENT_0],cmdbuf,strlen(cmdbuf),0)!=SOCKET_ERROR)
{cmdbuf[0]=0;
}
}
//-------for read------------------------------------
if(networkevents.lNetworkEvents & FD_READ)
{
if(networkevents.iErrorCode[FD_READ_BIT] != 0)
{
......
break;
}
recv(Socket[Index-WSA_WAIT_EVENT_0],recvbuf,sizeof(cmdbuf),0);
......//处理数据
}
//------for write--------------------------------------------
if(networkevents.lNetworkEvents & FD_WRITE)
{
if(networkevents.iErrorCode[FD_WRITE_BIT] != 0)
{
......
break;
}
if(strlen(cmdbuf)!=0)
{
send(Socket[Index-WSA_WAIT_EVENT_0],cmdbuf,sizeof(cmdbuf),0);
}
}
//-----for close--------------------------------------
if(networkevents.lNetworkEvents & FD_CLOSE)
{
if(networkevents.iErrorCode[FD_CLOSE_BIT] != 0)
{
....
break;
}
....
}
//-------------------------------------------
}
WSACloseEvent(NewEvent);
closesocket(Socket[Index-WSA_WAIT_EVENT_0]);
EventTotal = 0;
WSACleanup();