0

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

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

联合国:你好。

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

联合国:NOTlo

cout 语句正确地是“cout's”,最后没有“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);
}

谢谢!

4

2 回答 2

1

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

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

于 2012-11-30T00:35:47.863 回答
0

您没有'\0'正确添加。

我猜您的传输看起来像这样write(myFD, buffer, strlen(buffer)),那么您将发送除 0 终止符之外的所有内容。它第一次起作用,因为你可能做了一个memset.

buffer[amount_read]=0;可能会解决它。

于 2012-11-30T00:37:24.517 回答