虽然send 发送一次数据包,但是OnReceive 不一定一次接收完,它可能会分多次接收完,要看receive每次接收数据包大小。

解决方案 »

  1.   

    “OnReceive 不一定一次接收完”,这事我也考虑过,所以我专门单步调试看了很多次,发现我发的数据(不长,十几个字节)第一次就接收完了,而且第二次OnReceive()就是只收到SOCKET_ERROR,没有别的。
      

  2.   

    你是不是把API和MFC的类混合使用?
      

  3.   

    1. 在OnReceive中使用Receive接收数据包,不一定能一次全部读取(尤其在广域网的传输的情况下,因为OnReceive的机制决定了它的性质,只要缓冲区有数据,它就会通知),需要根据条件(如包长度)来循环读取.
    2. 不清楚你的客户端是怎么写的,如果是发送完直接关闭,那么是有可能会出现这样的情况.
    3. 如果实在无法入手查这个问题的话,我觉得可以通过wireshark在服务端抓取TCP数据包,然后分析TCP协议,查出谁先发的close.以上三点仅供参考
      

  4.   

    TCP连接中,如果一方closesocket了,另一方就会接收到信号,这个信号在套接字编程中表现为select可读取,但读取长度为0