此代码嵌入在使用套接字的“聊天室”程序中。它正在从客户端(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);
}
谢谢!
答案 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;
可能会修复它。