2015-07-10 71 views
0

我有一個服務器和一些客戶端,軟件方面,我希望客戶端找出服務器的IP地址,而不實際引用特定的數據庫。沒有集中式主機的網絡通信。可能嗎?

到目前爲止,我對UDP有一個誤解,認爲UDP只使用端口作爲服務器和客戶端之間的通用標識符,但顯然我錯了。

要求: 我希望我的服務器向網絡上的所有設備廣播一條消息,每5秒左右一次。 該消息將包含服務器的IP。

軟件使用這種技術已經: 一張照片transfering應用程式iOS版,名爲「照片傳輸應用程序」是很容易使用,因爲它主要是告訴你打開你的Mac和iPhone上的應用程序,然後你按「發現」和BAM!你的設備已經找到了對方。 但是如何?

我的要求如何實現?

編輯 我google了一下。服務器主機可以在255.255.255.255和客戶端連接到該地址解決我的問題?

According to this Wikipedia article,255.255.255.255用於廣播。

有人可以確認嗎?

+0

你想要什麼是不可能的。客戶端必須與SOMETHING交談以獲取有關服務器位置的信息,或者必須掃描網絡直到找到服務器。換句話說,您需要某種網絡數據庫來提供所需的信息。 dns'TXT'記錄,dhcp選項,等等等等等等。你不希望客戶開始廣播「yohooo,我在這裏」,因爲這隻會給網絡帶來無用的流量。 –

+0

@MarcB請再次閱讀我的問題,我已經添加了一些額外的信息。 – vaid

+0

由於發送到該地址會中斷網絡上的每個設備_(打印機,路由器,交換機,PC未參與等),因此您無法真正使用分配給「255.255.255.255」的設備(客戶端或服務器)。此外,如果您也想使用IPv6,則會出現問題,因爲IPv6上不存在廣播。你應該真的關注多播。 –

回答

1

如果您將使用廣播地址(255.255.255.255)或網絡廣播(如網絡192.168.1.xxx的192.168.1.255或前綴表示192.168.1.0/24)。您將獲得重要的限制:您的廣播將永遠不會離開該網絡。因此,局域網內的所有主機都會看到您的廣播消息,但沒有其他人。

由null提到的組播更好,因爲它可以離開你的網絡並通過IP路由器。但是這隻有通過該路由器上的特殊網絡設置才能實現(並且需要該路由器上的組播路由功能)。

另一種沒有這種限制的技術可以使用動態DNS(服務器將通過DNS註冊自己)。

+0

因此,如果我只想向家庭網絡內的所有設備廣播,地址'255.255.255.255'是否可以使用? – vaid

+0

@只有當您的家庭網絡只包含一個IP網絡時,它纔可以使用。如果你有兩個網絡(例如192.168.1.xxx和192.168.2.xxx,它們之間有路由器),它將不起作用。 –

+0

@DmitryPoroh多播不通過互聯網。廣播可以配置爲覆蓋多個子網。儘管192.168.0.255將保持在同一個子網中。廣播已棄用。它在IPv6中不存在。 – WalterM

1

Multicast會比廣播更好。另見:Bonjourmulticast DNS & SSDP

有關Bonjour的更多信息是available here

+0

好的,太好了。我只是試圖讓我的服務器主機UDP地址爲'255.255.255.255',我可以成功地接收到從我的Mac發送的消息。我的服務器通常將其IP設置爲'192.168.1.27',所以這就是我所使用的,因爲所有的通信都將從本地網絡中進行。我的方法是否存在安全問題? – vaid

+0

這正是Bonjour的目的。 [請看看](https://developer.apple.com/bonjour/)。 – 2015-07-10 22:55:37

+0

但是,蘋果和非蘋果設備之間的Bonjour工作? – vaid