11

我正在尝试使用 JmDNS 在我的客户端-服务器应用程序中启用服务发现。我完全理解服务器端的服务注册表,代码如下:

JmDNS jmdns = JmDNS.create(localhost);
jmdns.register(serviceInfo);

但是,我无法弄清楚如何让我的客户端从注册的服务中检索端口号和 IP 地址,并使用这些数据打开 TCP 连接。我搜索了如何使用 JmDNS 的示例,但无济于事。这里有人可以给我一些基本的例子吗?或者,如果有人有任何指向 JmDNS 上好的资源/教程的链接,他们可以提供吗?

注意:JmDNS 在这里是必需品,所以我希望得到仅与 JmDNS 相关的答案,而不提供替代方案。此外,我已经广泛查看了 JmDNS API,但仍然无法弄清楚,所以请不要将文档链接作为资源发布。

谢谢。

4

1 回答 1

20

服务器端:

mdnsServer = JmDNS.create(localhost);
// Register a test service.
ServiceInfo testService = ServiceInfo.create("my-service-type", "Test Service", 6666, "test service");
mdnsServer.registerService(testService);

客户端:

private ServiceListener mdnsServiceListener = new ServiceListener() {
  public void serviceAdded(ServiceEvent serviceEvent) {
    // Test service is discovered. requestServiceInfo() will trigger serviceResolved() callback.
    mdnsService.requestServiceInfo(Constants.mdnsServiceType, serviceEvent.getName());
  }

  public void serviceRemoved(ServiceEvent serviceEvent) {
    // Test service is disappeared.
  }

  public void serviceResolved(ServiceEvent serviceEvent) {
    // Test service info is resolved.
    String serviceUrl = serviceEvent.getInfo().getURL();
    // serviceURL is usually something like http://192.168.11.2:6666/my-service-name
};

mdnsService = JmDNS.create();
mdnsService.addServiceListener("my-service-type", mdnsServiceListener);
ServiceInfo[] infos = mdnsService.list(Constants.mdnsServiceType);

// Retrieve service info from either ServiceInfo[] returned here or listener callback method above.
mdnsService.removeServiceListener("my-service-type", mdnsServiceListener);
mdnsService.close();

获得 URLhttp://192.168.11.2:6666/myTestService后,您可以解析/使用它打开的套接字连接。希望有所帮助。

于 2011-11-19T21:29:13.870 回答