2010-03-18 94 views
2

Bonjour提供了一個不錯的方法:DNSSD.browse("_killerapp._tcp", this);。作爲這種方法的第一個參數,我給出了可能在網絡中可用的服務類型,並且作爲第二個參數給出了「回調對象」。所考慮的方法「瀏覽」指定類型的服務(第一個參數)。與Bonjour溝通的最佳方式是什麼?

在瀏覽期間,它可以「查找」,然後「丟失」一項服務。如果發現服務(丟失)bonjour調用回調對象的serviceFound(serviceLost)方法。使用找到的服務的一些參數調用serviceFound。更多細節:

serviceFound(DNSSDService browser, int flags, int ifIndex, String serviceName, String regType, String domain) 

但是爲了獲得服務的IP地址和端口,我們需要做額外的操作(人們稱之爲「解析服務」)。這對我來說很奇怪。爲什麼這個信息不能由serviceFound給出?我的意思是,爲什麼Bonjour無法在找到服務時自動解決服務問題。

無論如何,我只是接受給定的邏輯,並嘗試使用它。從serviceFound我打電話DNSSD.resolve(0, ifIndex, serviceName, regType, domain, this)

像以前一樣,我給了resolve(最後一個參數)的回調對象。不幸的是,我需要使用不同的類來爲browseresolve提供回調對象。其原因是,browseresolve可以調用回調對象的operationFailed方法,如果我用回調對象來自同一個班級,我不會知道哪種方法是調用operationFailedbrowseresolve)。

因此,我創建了一個單獨的類來爲resolve方法實例化一個回調對象。在這一類我有一個名爲serviceResolved方法,該方法是由卓悅與解決服務的IP地址和端口稱爲:

serviceResolved(DNSSDService resolver, int flags, int ifIndex, String fullname, String hostname, int port, TXTRecord txtRecord) 

我認爲,IP地址和端口應是執行瀏覽對象的領域。所以,在serviceResolved我有IP和端口,我想將這些值設置爲該服務的實例的相應字段。但我該怎麼做呢?此實例不作爲serviceResolved方法的參數給出。所以它是隱形的!

此外,我看到serviceResolved和serviceFound作爲第一個參數,DNSSDService resolver。有人知道它是什麼嗎?可能是這個對象可以用來設置服務的參數嗎?我知道這種類型的對象是由browse返回的。

回答

0

不是一個真正的答案,但想指出的是,除了Bonjour庫之外,您還可以嘗試JmDNS,這是一個純Java開源模塊。

相關問題