gpt4 book ai didi

java - 与 Bonjour 沟通的最佳方式是什么?

转载 作者:行者123 更新时间:2023-11-29 09:25:31 24 4
gpt4 key购买 nike

Bonjour 提供了一个很好的方法:DNSSSD.browse("_killerapp._tcp", this);。作为此方法的第一个参数,我给出了可能在网络中可用的服务类型,作为第二个参数,我给出了“回调对象”。所考虑的方法“浏览”指定类型的服务(第一个参数)。

在浏览过程中,它可以“找到”然后“丢失”一项服务。如果找到服务(丢失),bonjour 调用回调对象的 serviceFound(serviceLost) 方法。使用找到的服务的一些参数调用 serviceFound。更多详情:

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

但是要获取服务的IP地址和端口我们需要做额外的操作(人们称之为“解析服务”)。这逻辑对我来说有点奇怪。为什么 serviceFound 不能给出这些信息?我的意思是为什么 Bonjour 无法在找到服务时自动解析服务。

无论如何,我只是接受给定的逻辑并尝试使用它。从 serviceFound 我调用 DNSSSD.resolve(0, ifIndex, serviceName, regType, domain, this)

和以前一样,我给 resolve(最后一个参数)一个回调对象。不幸的是,我需要使用不同的类来为 browseresolve 提供回调对象。原因是 browseresolve 可以调用回调对象的 operationFailed 方法,如果我使用同一个类的回调对象我不知道哪个方法正在调用 operationFailed(browseresolve)。

因此,我创建了一个单独的类来实例化 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 将 DNSSSDService 解析器 作为第一个参数。有人知道这是什么吗?也许这个对象可以用来设置服务的参数?我知道 browse 会返回这种类型的对象。

最佳答案

不是真正的答案,但想指出的是,除了 Bonjour 库,您可能还想尝试 JmDNS,这是一个纯 Java 开源模块。

关于java - 与 Bonjour 沟通的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2469622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com