C ++套接字写入太多字符

时间:2012-11-30 00:30:42

标签: c++ sockets

此代码嵌入在使用套接字的“聊天室”程序中。它正在从客户端(myFD)读取并成功地将用户名附加到前面 但是,我在写入缓冲区中写入额外字符时遇到问题。上次发送的内容仍然存储并发送。

例如,我第一次发送(并正确写入)

  联合国:你好。

但是在第二次尝试时,当我写信时,说“不”,发送的信息将是:

  

UN:NOTlo

cout语句正确地“cout”而没有“lo”结尾,但客户端在结尾处收到“lo”。我忽略了一些简单的事情吗?

以下代码:

while ( (amount_read = read(myFD, buffer, 1024)) > 0)
{
    total = 0;
    strcpy(second, "");
    strcpy(second, username);
    total += unLength;
    strcat(second, ": ");
    total += 2;
    strcat(second, buffer);//, amount_read);
    total += amount_read;
    cout << second << endl;
    write(myFD, second, total);
}

谢谢!

2 个答案:

答案 0 :(得分:1)

您的字符串未终止,这就是您打印旧字符串的原因。您可以修复它,在字符串\0的末尾添加buffer[amount_read]=0,或者在下一次迭代之前清除整个字符串。

要清除缓冲区,您可以使用memset (buffer,'\0', 1024)。也许这不是最快的方式,但可以防止存储垃圾或数据,而这些垃圾或数据的存放时间不应超过必要的时间。

答案 1 :(得分:0)

您没有正确添加'\0'

我猜您的传输看起来像write(myFD, buffer, strlen(buffer)),然后您将发送除0终结符之外的所有内容。这是第一次,因为你可能做了memset

buffer[amount_read]=0;可能会修复它。