2010-09-20 96 views
9

我熟悉Bonjour在「本地」域名上使用廣告服務的情況。我已經通過了幾個例子,並且我知道我使用相應的Cocoa類。如何在跨子網使用Bonjour發佈服務?

我很好奇我是如何向其他子網宣傳簡單的Bonjour服務的。具體來說,我試圖編寫一個在我的桌面上運行的網絡服務,它通過以太網連接。客戶端運行在通過Wifi連接的移動設備(iPhone/iPad)上。在我的網絡設置中,Wifi與以太網位於不同的子網上。但是,兩者都在防火牆之後。我不需要在防火牆之外做廣告,我只想讓wifi客戶端能夠看到以太網連接的服務器所宣傳的服務。

這可能嗎?我知道Bonjour應該支持通過子網進行通信,但每當我嘗試閱讀有關此功能的內容時,都會深入探究DNS記錄以及什麼。我是一名應用程序開發人員......我不知道這些東西,也不希望用戶不必擔心。我錯過了一些簡單的東西嗎

+0

你確定這是一個編程問題嗎?聽起來更像是一個網絡配置問題。 – 2010-09-23 15:59:16

回答

15

這不是一個典型的編程問題,但我認爲這是測試基於Bonjour的代碼時的一個巨大障礙。

Bonjour支持兩種服務器機制來通知客戶端它們的存在,先在本地網絡上多播,然後DNS第二。

多播很容易使用,因爲沒有設置,不幸的是它只能用在同一個網絡上。

DNS可以在路由器(Internet)上工作,但它需要正確配置名稱服務器和使用該名稱服務器的客戶端。

我想你只有兩個選擇。

  1. 通告WiFi網絡
  2. 您Bonjour服務配置自己的DNS

在第一種情況下,實現該服務並不一定要通過自己的應用程序做廣告是非常重要的在Mac上運行。您可以使用實用程序dns-sd將任何IP地址/端口註冊爲網絡上的Bonjour服務。對於這個以類似的方式工作,你需要連接到你的無線網絡的計算機(蘋果機和Linux),並運行dns-sd有這樣的:

dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211 

這將與名爲「棧註冊一個「HTTP」服務溢出「作爲Bonjour服務。檢查一下 - 在終端中運行它,並在Bonjour下的Safari的書籤中檢查它。你可以用同樣的方式註冊你的應用程序。

不幸的是,你需要在連接到WiFi網絡的機器上運行此操作。這意味着您的Mac應用程序將在其自己的以太網上發佈廣告,dns-sd在WiFi上發佈廣告。

第二種選擇有點可怕,但如果您願意與某些管理人員交手,這並不重要。

同樣,您不需要在DNS中動態註冊服務。您可以簡單地在DNS配置中硬編碼Mac的名稱和應用程序的端口。這些只是需要添加到區域文件(DNS配置文件)的4行。

b._dns-sd._udp IN PTR @ ; b = browse domain 
lb._dns-sd._udp IN PTR @ ; lb = legacy browse domain 
_icool._tcp PTR iCool\ App\ Service._http._tcp 
iCool\ App\ Service._http._tcp  SRV 0 0 8888 macpro.domain.com. 

前兩行告訴客戶端(您的iOS設備)Bonjour已啓用此域。第三行告訴客戶有一個類型爲icool的服務「iCool App Service」。第四行告訴客戶當前服務的地址和端口。

客戶端將爲其配置的(或通過DHCP獲取的)「搜索域」查找DNS條目。檢查您的網絡設置。

您可以在Mac,某個Linux機器上運行nameserver,也可以使用像dyndns.com這樣的服務。

希望這會有所幫助。

+0

好吧,如果你在WiFi網絡上沒有任何盒子,但你有更多的iOS設備,你可以創建一個小應用程序,在WiFi網絡上註冊你的Mac應用程序。 – Michal 2010-09-24 12:55:52

+0

感謝一羣人,這確實爲我清除了它。我認爲它在編程方面有些不同。 – pj4533 2010-09-24 21:10:26

+0

嗨,我寫了一篇博客文章,上面寫了我寫的廣告我的bonjour服務的應用程序。我還能夠讓我的待辦事務經理,事情,在我的辦公室與這種技術同步。我使應用程序通用,並將代碼放在GitHub上。再次感謝http://www.saygoodnight.com/?p=170。 – pj4533 2010-09-28 00:50:08