C++ C++;TCP服务器多次接收数据

C++ C++;TCP服务器多次接收数据,c++,server,tcp,C++,Server,Tcp,发送hello时的输出 我正在编码C++ TCP服务器,我使用while循环来连续获取数据,但我认为它接受相同的东西并打印出它要输出的东西。 while(true) { 字符缓冲区[5]; if(recv(clisoc,buffer,sizeof(buffer),0)){ 字符串abc=(字符串)缓冲区; cout您只测试了recv的返回值,以查看它是否没有检测到正常关闭,因此后续代码都不知道您收到了多少数据。很可能,您只接收了一次数据,但打印了两次。您不能将任意数据强制转换为字符串,这仅适用于

发送hello时的输出

我正在编码C++ TCP服务器,我使用while循环来连续获取数据,但我认为它接受相同的东西并打印出它要输出的东西。

while(true)
{
字符缓冲区[5];
if(recv(clisoc,buffer,sizeof(buffer),0)){
字符串abc=(字符串)缓冲区;

cout您只测试了
recv
的返回值,以查看它是否没有检测到正常关闭,因此后续代码都不知道您收到了多少数据。很可能,您只接收了一次数据,但打印了两次。您不能将任意数据强制转换为
字符串,这仅适用于指向实际字符串的指针

这些调用返回接收到的字节数,如果发生错误,则返回-1。如果发生错误,则设置errno以指示错误。在哪里检查返回值?
recv
返回接收到的字节数。它不是布尔值。它可以返回-1,在这种情况下将执行
if
statement的代码。
(string)buffer
预期
buffer
的内容会被nul终止,但没有理由相信它们会被nul终止。
sizeof(buffer)
与实际存储在缓冲区中的字节数
recv
无关。与其说是“忽略”,不如说是“未能捕获
recv()的返回值”
call。他只测试了
recv()
的返回值,看看它是否为零。-1不是一个成功。而且它没有“可能”。这是肯定的。