系统等待/接收数据时,UDP网络卡住

时间:2015-06-27 13:25:35

标签: c++ c sockets udp

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

network diagram

我从中准备好使用示例 http://www.binarytides.com/udp-socket-programming-in-winsock/

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

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

是否有任何方法可以继续向服务器发送数据,同时还在等待传入数据?

1 个答案:

答案 0 :(得分:4)

这是因为默认套接字是阻塞的,这意味着recvread系列调用将挂起,直到有可用数据。您需要将非阻塞I / O与select()poll()等多路复用一起使用,或者使用单独的专用线程来接收数据。

非阻塞I / O在设计上与阻塞I / O代码有很大不同,因此您无法进行简单的更改。我建议您阅读Beej's Guide to Network Programming之类的内容,其中包含所有这些问题。