2010-04-06 136 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

我建議通過將請求放入隊列並讓其他線程脫離隊列來解決這個問題。這將從接收過程中分離出套接字,從而允許您擴展到更多監聽器和處理線程(如果需求發生變化)。