如此发送数据:
///////////-----------------------send------------------
char s_content[8192];
GetDlgItemText(IDC_SENDING_MSG,s_content,sizeof(s_content));
err=send(socket,s_content,sizeof(s_content),0);
if(err==SOCKET_ERROR)
{
status="send the message(s) error!";
UpdateData(0);
}
如此接收数据:
///////////-----------------------receive----------------
char rcv_content[8192];
if(recv(m_sock_accept,rcv_content,sizeof(rcv_content),0)!=SOCKET_ERROR)
{
SetDlgItemText(IDC_RECEIVED_MSG,rcv_content);
}两个控件都是EIDTbox,为何显示出来有时是下面那样的乱码,有时能正常显示?
烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫

解决方案 »

  1.   

    memset(s_content, 0, 8192);
    memset(rcv_content, 0, 8192);
      

  2.   

    char s_content[8192] = {0};char rcv_content[8192] = {0};
    haha 和上面的一样
      

  3.   

    err=send(socket,s_content,strlen(s_content),0);if(int len = recv(m_sock_accept,rcv_content,sizeof(rcv_content),0)!=SOCKET_ERROR)
    {
    rcv_content[len] = '\0';
    SetDlgItemText(IDC_RECEIVED_MSG,rcv_content);
    }
      

  4.   

    呵呵,你每次发送的数据都是8192字节,你的字符串内容总是在这8192的前N个字节.
    而且,TCP数据包长度在底层发送的时候默认都会被分成不大于1500字节的小包来发送.你的问题也许是出在这个上面,你可以修改一下代码.
    发送部分:
    int send_len = GetDlgItemText(IDC_SENDING_MSG,s_content,sizeof(s_content));
    err=send(socket,s_content,send_len,0);
    接收部分:
    char rcv_content[8192];
    memset( rcv_content, 0, sizeof( rcv_content ) );
    对了,你这样的代码在学习的时候是可以的,但是在实际工作中还有很多其他问题需要考虑.
      

  5.   

    接受数据时先清空SOCKET的接受缓冲区再RECV()
      

  6.   

    memset(rcv_content,0,sizoef(rcv_content));
    recv(m_sock_accept,rcv_content,sizeof(rcv_content)-1,0)