可能是我的消息收到额外字符的原因是什么?

时间:2014-03-13 01:44:10

标签: c++ c++builder winsockets

我试图制作一个程序,使用winsock为我的学校项目发送信息(字符集)到另一个程序(客户端/服务器)。

我发送的消息在另一方收到,但最后有额外的字符。 I.E.如果我想发送" hallo"我收到" hallod3"或一些随机符号。

P.S:邮件从客户端发送到服务器

这是我在服务器上的代码:

 char recvbuf[DEFAULT_BUFLEN];
    int recvbuflen = DEFAULT_BUFLEN;

  do {

        iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);     
        if (iResult > 0) {
            ShowMessage(recvbuf);
        }

        else if (iResult == 0)
            ShowMessage("Connection closing...\n");
        else  {
            ShowMessage("recv failed with error: %d\n", WSAGetLastError());
            closesocket(ClientSocket);
            WSACleanup();
            ShowMessage("send failed");
        }
     } while (iResult > 0);

以及客户:

 char sendbuf[DEFAULT_BUFLEN];

  iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
    if (iResult == SOCKET_ERROR) {
        ShowMessage("send failed with error: %d\n", WSAGetLastError());
        closesocket(ConnectSocket);
        WSACleanup();
       ShowMessage("send failed");
    }

定义了DEFAULT_BUFLEN(消息的长度),ShowMessage()是来自VCL组件的函数(我使用Borland C ++ Builder),它接受一个字符串并显示它。

P.S:我确定了字符串' sendbuf'在客户端,没有额外的角色,我甚至添加' \ 0'在字符串的末尾。

这可能是什么问题?

2 个答案:

答案 0 :(得分:2)

没有收到额外的字符'。只是在显示接收缓冲区时你忽略了iResult。它只适用于iResult字节,而不是整个事件。

答案 1 :(得分:1)

strlen返回的计数不包括' \ 0'性格,所以' \ 0'字符不会被发送。 此外,您无法保证在一次recv通话中收到整条消息。