2012-03-19 18 views
5

我正在實現一個iPhone/iPad應用程序,允許用戶使用bonjour協議發送其他消息。基本上,服務器通過bonjour發佈他的服務,並且連接到相同wifi的客戶端可以發現他的服務並連接到它以開始發送消息。我發現的問題是一些路由器似乎與Bonjour有問題。在家中或其他地方運行我的應用程序時,它可以很好地工作。 bonjour服務的發佈和發現完美無瑕。然而,當我在我朋友的一個公寓裏嘗試我的應用程序時,一些(不是所有)客戶都無法發現公佈的bonjour服務。我還注意到其他使用Bonjour的應用程序(例如Apple的Remote應用程序)也在上述網絡中遇到麻煩。在做了一些挖掘之後,我發現其他人對bonjour和一些路由器也有類似的問題。因此,我有2個問題:替代使用Bonjour協議的iPhone對等

1)有誰知道這個問題,卓悅,有些路由器似乎是一個普遍的問題?換句話說,如果我的應用程序依賴於Bonjour來完成功能,那麼我是否必須擔心它在WLAN網絡的50%中無法工作,或者大多數路由器是否對Bonjour沒有任何問題。顯然,我不能指望任何人知道每個路由器如何處理bonjour數據包,但也許有一些網絡專家可以指出我正確的方向:-p。

2)其次,如果Bonjour是太冒險了一個協議來建立我的應用程序,都有些什麼替代品具有類似的功能?我會(最好)需要的功能將是服務發佈和發現,而無需用戶手動輸入其他電話的IP地址。

好的謝謝你的幫助!我明白這是一個廣泛的問題,但任何幫助表示讚賞! :)

+0

你能檢查路由器是否有一個啓用客戶端到客戶端通信的設置?一些WLAN路由器將客戶端彼此隔離。至於這是多麼廣泛 - 有相當多的路由器具有這種功能。如果客戶端隔離有效,其他服務發現協議將無法直接在兩個客戶端之間運行。 – ldx 2012-03-21 12:52:03

+0

你好。謝謝你的提示!我必須檢查一下。問題出在朋友的路由器上,所以我必須到她的地方去查看它。 – 2012-04-02 08:17:06

回答

3

這可能是一個棘手的問題。導致設備在某些網絡上找不到對方的問題與底層傳輸(即多播UDP)有關,而不是與Bonjour(或mDNS或任何其他你想稱之爲的設備)相關。

在高級別,非嚴格而言,多播數據將更多的負載上的路由器。大型企業和大學網絡有時得像要滴卓悅消息(即發送到多播組224.0.0.251端口5353 UDP數據包),因爲這意味着該網絡不與數千客戶宣傳他們的iTunes資料庫或任何淹沒,並在這個規模可以提高總體表現。另一方面,由於製造商只知道某些原因,一些家用路由器將組播數據包丟棄。對於這兩種情況,你都無法做到。

嘗試運行網絡上的tcpdump,看看是否包實際上是未來通過。我還沒有遇到過一段時間沒有轉發他們的家庭路由器。如果他們不是,你將不得不提出一些中央[面向互聯網,或許?]查找設施。如果它們可見,那麼你的實現就有一些問題。

沒有什麼阻止你寫服務發現自己的簡單的協議在multicast-它只是有一噸不同語言的卓悅客戶的負荷已經編寫並測試發送。