我有一个客户端服务器需要保持连接。所以我真的很困惑何时停止接收数据。recv()始终返回1。while()不能停止!
int nbytes = 0;
char buf_to_parse[4096] = { '\0' };
char saveAll[20480] = { '\0' };
while ((nbytes = recv(wParam, buf_to_parse , 4096 , 0) != 0)) //nbytes is always 1
{
sprintf_s(saveAll, "%s%s", saveAll, buf_to_parse);
}
最佳答案
这是因为你正在做一个比较,并将其转换成一个整数。当你说
nbytes = recv(wParam, buf_to_parse , 4096 , 0) != 0
因为操作员的谨慎,这意味着
nbytes = (recv(wParam, buf_to_parse , 4096 , 0) != 0)
它只测试
recv()
的返回值是否不为零,并将false或true(按惯例为0或1)放入nbytes
中。你想要的是(nbytes = recv(wParam, buf_to_parse , 4096 , 0)) > 0
这将把字节数设置为nbytes,然后比较该值。您还必须考虑错误条件中的负值,而不仅仅是只有在正确断开连接时才给出的零值。
如果关闭操作正确的话,您本来可以为
while
工作的代码,但是nbytes
无论如何都是错误的。