我有一个客户端服务器需要保持连接。所以我真的很困惑何时停止接收数据。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无论如何都是错误的。

10-07 15:20