C ++ Winsock非阻塞/异步UDP套接字

时间:2010-04-06 00:34:15

标签: sockets asynchronous udp

我正在通过UDP套接字在c ++中开发一个小数据处理器,并且有一个线程(只有一个,并且分开了套接字)来处理从它们收到的信息。

当我需要同时从套接字中的多个客户端接收信息时,我的问题就出现了。

我怎么能这样做:

Socket foo;
/* init socket vars and attribs */
while (serving){
thread_processing(foo_info);
}

用于c ++中的多个客户端(多个并发访问)?

我在win32上使用winsocks atm,但只是获得标准的阻止udp套接字工作。没有gui,它是一个控制台应用程序。 我会非常感谢一个例子或指向一个的例子;)。

提前致谢。

2 个答案:

答案 0 :(得分:1)

UDP套接字能够使用recvfrom()函数从多个客户端接收数据报。只需阻止接收,读取请求,处理它,发送回复,重复。你甚至不需要一个线程,除非处理需要很长时间(在这种情况下,一个与两个队列连接的线程,in-out和out-都可以工作)。

答案 1 :(得分:0)

我建议最好通过将请求放入队列并让其他线程脱离队列来解决这个问题。这会将套接字接收与进程分离,从而允许您在需求发生变化时扩展到更多的侦听器和处理线程。