gpt4 book ai didi

java - JmDNS: 无法解析服务

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:25:46 25 4
gpt4 key购买 nike

我正在尝试为 Android 应用程序和桌面应用程序之间的通信实现 JmDNS 发现。我遵循了以下教程: http://home.heeere.com/tech-androidjmdns.html

Android 应用程序注册一个服务,桌面应用程序为该服务添加一个监听器。我的四分之三的设备都可以正常工作,但是第四个(运行 Android 3.2 的三星 Galaxy Tab 10.1 PT7500)我无法解决该服务。我的处理程序收到 serviceAdded 事件,但没有收到 serviceResolved 事件。我也试过调用 jmdns.requestServiceInfojmdns.getServiceInfo,但前者什么都不做,后者超时并返回 null。

然而,jmdns-browser 能够很好地解析服务,所以它不是设备。这两个设备上都没有防火墙。该服务始终使用 IPv4 地址。

有人知道是什么导致了这个问题吗?

服务启动代码:

jmdns = JmDNS.create(wifiAddress);

ServiceInfo serviceInfo = ServiceInfo.create(Constants.SERVICE_TYPE,
Constants.SERVICE_NAME, Constants.ZEROCONF_PORT, "my service");

HashMap<String, String> deviceInfoMap = new HashMap<String, String>();
deviceInfoMap.put(Constants.KEY_DEVICE_NAME, getDeviceName());
deviceInfoMap.put(Constants.KEY_DEVICE_ID, getDeviceId());
// ...
serviceInfo.setText(deviceInfoMap);

jmdns.registerService(serviceInfo);

客户端/监听器代码:

jmdns = JmDNS.create();
jmdns.addServiceListener(Constants.SERVICE_TYPE, serviceListener = new ServiceListener() {
@Override
public void serviceResolved(ServiceEvent event) {
System.out.println("Service resolved: " + event.getName() +
" of type " + event.getType());
}

@Override
public void serviceRemoved(ServiceEvent event) {
System.out.println("Service removed: " + event.getName() +
" of type " + event.getType());
}

@Override
public void serviceAdded(ServiceEvent event) {
System.out.println("Service added: " + event.getName() +
" of type " + event.getType());
ServiceInfo info = jmdns.getServiceInfo(event.getType(), event.getName());
System.out.println("Service info: " + info); // --> null
}
});

输出:

Service added: my service @ GT-P7500 of type _mytype._tcp.local.
Service info: null
Service added: my service @ Galaxy Nexus of type _mytype._tcp.local.
Service info: [ServiceInfoImpl@183779345
name: 'my service @ Galaxy Nexus ._mytype._tcp.local.'
address: '/192.168.1.154:4242 ' status: 'DNS: myhost.local.
state: probing 1 task: null', has data
deviceName: Galaxy Nexus
deviceId: <id>
displayDensity: XHDPI
]

最佳答案

github repository 查看最新的源代码版本成功了。发现该服务现在可以在所有设备上正常工作。 (注意:我使用的是之前从 sourceforge 下载的 JmDNS 3.4.1 版)

浏览 SVN 历史后,似乎有一些与解决服务问题相关的提交,自 3.4.1 版本以来。

编辑:将 svn 替换为 github 存储库,因为 jmdns 已移至那里。

关于java - JmDNS: 无法解析服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14340458/

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