套接字RECV卡在循环中

时间:2016-01-02 12:21:52

标签: c++ sockets

我有以下代码:

{{1}}

我期望发生的事情是当我的客户端将数据发送到服务器以便它接收数据,输出数据然后返回尝试接收更多数据但它实际上从未到达cout线。如果我删除循环它工作正常,为什么while循环使RECV永远不会结束..?

发送代码:

{{1}}

由于

2 个答案:

答案 0 :(得分:1)

std::cout被缓冲,因此输出不会直接显示。
尝试

std::cout << buffer << std::flush;

代替。

关于为什么循环永远不会结束:默认情况下,套接字处于阻塞模式,因此只要有一些数据可用,recv就会等待,然后才返回。
您必须将server套接字移动到非阻塞模式或只读一次。

答案 1 :(得分:1)

首先,您必须检查recv()的返回值。

然后,如果您使用std::cout,则必须确保buffer以空值终止。

只要没有数据,或者发生错误(或连接关闭,超时等),

recv()就会阻塞。

更新(已添加发送代码)

cin >> buffer;

- &GT;你的缓冲区可能在这里溢出..

send(client, buffer, BUFFER_LENGTH, 0);

- &GT;这里也是:总是检查返回码。