2013-04-25 136 views
7

我對網絡編程沒有太多經驗,我正在編寫一個多平臺系統,要求每個設備能夠在同一局域網內找到其他設備,我在想什麼是一個正確的做法,可能是這裏的人能向我提供一些建議,這是我的設計要求,什麼是在局域網上實現設備發現的最佳方式

  1. 我使用C++和解決方案必須是跨平臺的,這至少能夠在iOS上運行時,Windows ,Android。

  2. 該系統應該是相當輕的重量,並在沒有特殊設置或網絡要求的情況下工作,如果可能的話。

下面是到目前爲止我的頭腦風暴不同的方法,

  1. 使用UPnP協議,但我不是很熟悉的話,並沒有顯得有關於如何使用多實例它在代碼中。

  2. 使用傳統的套接字方法,在每個設備上創建服務器/客戶端,並將數據包發送到LAN上的每個IP。之後手動完成所有工作。糾正我,如果我錯了,如果我發送一個數據包到廣播地址,這意味着系統會自動發送我的數據包到子網內的每個IP?

  3. 使用外部服務器,所有客戶端將註冊到該外部服務器,然後從服務器獲取其他客戶端的信息。但是,我不確定每個客戶端應該連接哪些信息以確定它們在同一個LAN中。

讓我知道如果我在想什麼使任何感官和任何建議非常感謝。

+0

通常將UDP數據包發送到廣播地址,並提供稍後進行常規連接的設置信息。發送到廣播的包將被髮送到該子網中的每個設備。我建議啓動Wireshark以查看幕後發生的情況。 – Brad 2013-04-26 14:54:44

+0

感謝您的信息,但我聽說路由器可以設置爲停止廣播,並且它通常是LAN中的默認設置。真的嗎?如果是的話,那麼這種方法是不是很可靠,然後 – NachoChip 2013-04-26 18:17:00

+0

不,路由器會在您的網絡和另一個網絡之間。廣播數據包僅發送到您的網絡,因此路由器的配置對它們沒有影響。另外,如果路由器能夠做到這一點,你的網絡將無法工作。廣播數據包對於基本功能很重要,例如DHCP,UPnP和Bonjour(例如Marko的答案)。 – Brad 2013-04-26 18:38:46

回答

3

你還沒有列出的一個選項是ZeroConf's DNS-SD協議。

它被蘋果公司大量使用 - 將其作爲Bonjour(néeRendezvous)銷售。 與iOS和MacOSX緊密集成。
Apple還提供了一個Windows實現,一個SDK並且已經開源了mDNS服務。

Android似乎支持它out of the box

對於大多數桌面發行版中包含的Avahi形式的Linux,也有強大且成熟的支持。

似乎用戶需要安裝任何東西的唯一平臺是Windows,即使這樣,它也會與iTunes(用於音樂庫共享)以及用於任何Apple無線接入點的安裝軟件一起安裝。

+0

僅供參考 - 需要了解的內容:http://superuser.com/questions/730288/why-do-some-wifi-routers-block-multicast-packets-going-from-wired-to-wireless – hooby3dfx 2014-03-26 12:00:07

相關問題