系统等待/接收数据时UDP网络阻塞

Shi*_* Hu 5 c c++ sockets udp

我必须建立一个双边UDP网络系统,这意味着服务器和客户端都可以发送和接收数据,如下图所示:

网络图

我从http://www.binarytides.com/udp-socket-programming-in-winsock/获取了一个随时可用的示例

但是,在客户端上,当发送数据(字符串)时,客户端会卡住,等待此行上的传入数据: recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen)

客户端在接收到传入数据之前无法发送更多数据。

有什么方法可以让我在等待输入数据的同时继续向服务器发送数据?

Mat*_*hew 4

这是因为默认情况下套接字是阻塞的,这意味着recv家庭read呼叫将挂起,直到有可用数据为止。您需要使用具有多路复用功能的非阻塞 I/O(如select()或 )poll(),或者使用单独的专用线程来接收数据。

非阻塞 I/O 在设计上与阻塞 I/O 代码显着不同,因此您无法进行简单的更改。我建议您阅读Beej 的网络编程指南之类的内容,其中涵盖了所有这些问题。