使用线程每隔40毫秒接收指定IP上的数据包(数据报方式),在发送端主机没有包发出时,接收端出错并退出程序.请问是何原因?采用什么方式解决?

解决方案 »

  1.   

    你用WSAAsyncSelect()函数设置为异步接受,有数据就接受,没数据就等待,应该可以吧!
      

  2.   

    我感觉你的问题没有必要建立线程每隔40秒接受一次,如果使用winsock API编程,只要使用
    WSAAsyncSelect(ListenSocket,yourHwnd,WM_SOCKET,FD_ACCEPT)就可以在接受到ip数据报后在CALLBACK函数WindowProc中处理,由于是异步I/O,不会阻塞其他消息的处理。如果是使用MFC类CAsyncSocket和CSocket,则调用AsyncSelect()函数,注册FD_ACCEPT事件,在OnAccept中接收。winsock API可参考《windows网络编程》
      

  3.   

    收数据是在OnReceive 里面的
      

  4.   

    建议用CAsyncSocket 选UDP
    AsyncSelect()不需要用到的。因为有数据到时会触发OnReceive()
    然后你 Receive
    你也可以每格40MS去Receive ,但没有数据的话就收不到至于你说出错退出的问题,我想应该是你程序的问题,你调试一下
      

  5.   

    在线程中做一个死循环,采用receivefrom()接收应该没有问题,最近刚做过