创建的套接字是TCP类型。
我用WSAAsyncSelect(m_chargeQuerySocket, m_hWnd, UM_CHARGE_QUERY, FD_READ);这样的套接字IO模型后,当我得到
UM_CHARGE_QUERY消息并判定是FD_READ后用WSARecvFrom()函数接受
WSARecvFrom(m_chargeQuerySocket, &wsabuf, 1, &dwRead, &dwFlag, (SOCKADDR*)&addrFrom, &len, NULL, NULL);
wsabuf.buf[dwRead] = '\0';
为什么在有的机器上接受的数据要少一点,也就是说为什么会接受不全呢?换句话说,接受到FD_READ后是否表明缓冲区的数据已经接受完毕呢?
希望大家能帮助一下!谢谢了

解决方案 »

  1.   

    1.TCP 使用WSARecv()。
    2.FD_READ事件不能保证一次接受完整数据,你应该每一个FD_READ事件进行一次数据的接收和处理。
      

  2.   

    你的意思就是肯定了我接受得到一个FD_READ,那么相对于这个FD_READ事件接受就一定是完整的?
      

  3.   

    一次收不完很正常啊, 比如对方发了100个字节过来, 你接收的时候, 接收缓冲区只有10个字节, 那它每次只收10个字节, 或者TCP出现粘包, 都需要多次FD_READ读取之后, 拼成完整的数据包