2010-04-06 67 views
3

我正在用C++在UDP套接字上开发一个小数据处理器,并且有一个处理从它们接收到的信息的线程(只有一个,分开的套接字)。C++ Winsock无阻塞/异步UDP套接字

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

我怎么会做这样的事情:

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

在C多个客户端(许多并发访问)++?

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

在此先感谢。

回答

1

UDP套接字能够通过recvfrom()函数接收来自多个客户端的数据报。只要阻止接收,阅读请求,处理它,发送答复,重复。你甚至不需要线程,除非处理需要很长时间(在这种情况下,一个线程与两个队列连接,即进出)将会工作。

0

我建议通过将请求放入队列并让其他线程脱离队列来解决这个问题。这将从接收过程中分离出套接字,从而允许您扩展到更多监听器和处理线程(如果需求发生变化)。