2010-03-18 89 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开源模块。

相关问题