簡體   English   中英

與Bonjour交流的最佳方式是什么?

[英]What is the best way to communicate with Bonjour?

Bonjour提供了一種不錯的方法: DNSSD.browse("_killerapp._tcp", this); 作為該方法的第一個參數,我提供了可能在網絡中可用的服務類型,作為第二個參數,我給出了“回調對象”。 指示類型(第一個參數)的服務的考慮方法“瀏覽”。

在瀏覽過程中,它可以“查找”然后“丟失”服務。 如果發現服務(丟失),請調用回調對象的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的方法,該方法由Bonjour調用,並具有已解析服務的IP地址和端口:

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

我認為IP地址和端口應該是執行瀏覽的對象的字段。 因此,在serviceResolved我具有IP和端口,並且要將這些值設置為browse服務的實例的相應字段。 但是我該怎么辦呢? 該實例不作為serviceResolved方法的參數給出。 所以,它是看不見的!

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM