這不是一個典型的編程問題,但我認爲這是測試基於Bonjour的代碼時的一個巨大障礙。
Bonjour支持兩種服務器機制來通知客戶端它們的存在,先在本地網絡上多播,然後DNS第二。
多播很容易使用,因爲沒有設置,不幸的是它只能用在同一個網絡上。
DNS可以在路由器(Internet)上工作,但它需要正確配置名稱服務器和使用該名稱服務器的客戶端。
我想你只有兩個選擇。
- 通告WiFi網絡
- 您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這樣的服務。
希望這會有所幫助。
你確定這是一個編程問題嗎?聽起來更像是一個網絡配置問題。 – 2010-09-23 15:59:16