繁体   English   中英

recv()总是返回1

[英]recv() always return 1

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM