2012-01-12 51 views
0

我正在寫一個遊戲的UDP服務器。 你知道如果有可能在一個端口上有UDP multisocket嗎?或者我必須使用動態端口(一個套接字=一個端口)?用C++和windows API的udp socket

感謝

回答

0

Using SO_REUSEADDR...

使用SO_REUSEADDR

SO_REUSEADDR套接字選項允許套接字另一個插座強制綁定到正在使用的端口 。在調用與原始套接字 相同的端口上的綁定之前,第二個套接字調用setsockopt,其中 將optname參數設置爲SO_REUSEADDR,將optval參數集 設置爲布爾值TRUE。一旦第二個套接字成功綁定,綁定到該端口的所有套接字的行爲都是不確定的。例如對於 示例,如果同一端口上的所有套接字都提供TCP服務,則 端口上的任何傳入TCP連接請求不能爲 保證由正確的套接字處理 - 行爲爲 非確定性。惡意程序可以使用SO_REUSEADDR至 強制綁定已用於標準網絡協議 服務的套接字,以拒絕對這些服務的訪問。使用此選項不需要特殊的 權限。

獎勵閱讀:What exactly does SO_REUSEADDR do?

2

在一個UDP端口上創建多個套接字沒有多大意義。 UDP不是像TCP這樣的2點協議,因此使用一個「服務器」套接字綁定到特定的端口,您可以處理數百個客戶端。

0

如果通過setsockopt指定了SO_REUSEADDR,那麼可以確保在一個端口上有多個UDP套接字。 但是,我懷疑你真正需要的是使用一個UDP套接字與多個客戶端通信,這也是可行的。 UDP不是面向連接的,像sendto和recvfrom這樣的UDP API可以區分一個套接字上的不同對等體。