繁体   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