老大们救我,我没辄了!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();
问题是:单步调试状态下一切正常。在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();
...全文
相关推荐
天邑TY1608-S905L3芯片线刷救砖包 里面有图,核对后可以刷机!!!
电信天邑TY1608-S905L3芯片线刷救砖包 百分百可以用 看清楚型号下,刷机有风险,已经成功救砖多台机顶盒.
google nexus 5 刷机 卡刷 救砖教程
本文仅供学习交流使用,如侵立删! 联系方式见文末 有时间出一篇root流程,需要的可以持续关注下 准备: google nexus 5 手机一部 数据线一条(原装线确保连接pc可传输数据) 电脑一台:win10 nexus 5 纯净系统刷机包下载 提取码:hm6p 1、解锁 连接电脑的状态下将手机关机,然后按住电源键和音量下键重启,进入bootloader模式。 成功进入后再电脑CMD中输入fastboot oem unlock 音量上或音量下可以选择到"yes"的菜单中,用开机键确
QPST救砖所需文件
用QPST软件救黑砖时可能会用到的mbn,hex等4个文件。
云门侠义道后台外辅试用版
侠义道挂机好用支持后台运行侠义道智能外辅/.....
魅族救砖工具+详细教程
魅族大部分机型可用,不能开机可以尝试下载使


网络及通讯开发
