recv()总是返回1

时间:2015-11-18 06:34:57

标签: c windows sockets

我有一个需要保持连接的客户端服务器。所以我真的很困惑何时停止接收数据。 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);
    }

1 个答案:

答案 0 :(得分:2)

这是因为您正在进行比较,并将其转换为整数。当你说

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都会出错。