2011-06-18 45 views
7

我正在研究一個小型的網絡遊戲原型,它將在使用UDP的局域網上播放。爲了發現網絡上的其他計算機,我一直在調查廣播。但是,我仍然不確定關於UDP套接字設置/使用(網絡新手)的一些細節。在遊戲開始後,我發現了一個好的圖書館,但起初必須發現所有運行遊戲的計算機,並且必須選擇一臺作爲服務器。所以我的問題如下:用於LAN計算機發現和服務器設置的UDP廣播

  • 可以使用單個UDP套接字來偵聽和發送廣播嗎?我很肯定這個答案是肯定的,但我想驗證它。
  • 使用UDP時,您是否實際上必須使用bind()?據我瞭解,connect()不是必需的,也不是send()/recv(),因爲它們是TCP(sendto()/recvfrom()是替代品)。
+0

這是一個深思熟慮的問題,但它包含多個問題,可能會更好地作爲單獨的問題。 – 2011-06-18 01:46:25

+0

@ 0A0D好點,我不確定是否應該分開它,因爲它們有點相關。我將把UDP包放在一起,並把最後兩個作爲單獨的問題提出來。 – Gemini14

回答

4
  1. 是的,你可以發送廣播,單播發送和接收數據包(廣播或單播)從單一插座。這對於「回覆發件人」的工作非常有用。

  2. 不是每個套接字都需要使用綁定。如果你不這樣做,將自動爲你選擇一個端口。但是有人必須綁定一個預共享端口號才能正確傳送第一個數據包(可能是廣播)。第一個數據包包含源端口和IP地址;回覆數據包可以使用這個。

  3. 但是,將兩端綁定到固定的端口號會使防火牆配置更簡單。

  4. setsockopt(SO_BROADCAST),否則嘗試發送廣播數據包時會出錯。

+0

非常明確的答案,特別是關於綁定的一點 - 現在對我來說更有意義。謝謝! – Gemini14