我必须建立双边UDP网络系统,这意味着服务器和客户端都会发送和接收数据,如下图所示:
我从中准备好使用示例 http://www.binarytides.com/udp-socket-programming-in-winsock/
但是,在客户端上,当发送数据(字符串)时,客户端会等待此行上的传入数据:
recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen)
在接收传入数据之前,客户端无法发送更多数据。
是否有任何方法可以继续向服务器发送数据,同时还在等待传入数据?
答案 0 :(得分:4)
这是因为默认套接字是阻塞的,这意味着recv
和read
系列调用将挂起,直到有可用数据。您需要将非阻塞I / O与select()
或poll()
等多路复用一起使用,或者使用单独的专用线程来接收数据。
非阻塞I / O在设计上与阻塞I / O代码有很大不同,因此您无法进行简单的更改。我建议您阅读Beej's Guide to Network Programming之类的内容,其中包含所有这些问题。