如果是一秒送几条还正常,如果是一秒送十来条就经常会再现调包
int CTcp::Send(char *buffer, int sendlen)
{
if (!m_bConnected)
{
return (0);
}

int sendedlen = send(m_sock, buffer, sendlen,0);

if (sendedlen == SOCKET_ERROR)
{
Close();
return (SOCKET_ERROR);
} return (sendedlen);
}

解决方案 »

  1.   

    用的是TCP协议吗,如果应用程序没有错误,是不是粘包的问题啊,
      

  2.   

    是TCP协议,但是每次send()之后都有sleep,这样也有可能出现粘包吗
      

  3.   

    与sleep应该没有关系把除非设置了 sockopt
      

  4.   

    如果想省事,每次send后,selee一下。
    如果想完全解决,应该在收到FD_WRITE后才调用send函数
      

  5.   

    fd_set fdwrite;
    FD_ZERO(&fdwrite);
    FD_SET(m_sock,&fdwrite);
      while (i<50)
      {
        if((Ret = select(0,NULL,&fdwrite,NULL,NULL)) == SOCKET_ERROR)
    {
      i ++;
          Sleep(100);
    }
    else
      break;
      }
    int sendedlen = send(m_sock, buffer, sendlen,0);
    我这样写好像还是没用
      

  6.   

    搞那么复杂干嘛!你直接
    int sendedlen = send(m_sock, buffer, sendlen,0);
    Sleep(50);
    这样都会掉包的话,我就无语了
      

  7.   

    粘包很正常~~~~~~~~~
    接收端一样有缓冲
    并不是说你发送时sleep了就不会粘