客户端 - 服务器中的JmDNS服务发现 [英] JmDNS service discovery in client-server

查看:509
本文介绍了客户端 - 服务器中的JmDNS服务发现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to enable service discovery in my client-server application using JmDNS. I fully understand service registry on the server side, with code that resembles this:

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

但是,我无法确定如何让我的客户端检索端口号和IP地址从注册的服务并使用此数据打开TCP连接。我搜索了如何使用JmDNS的示例,但没有效果。这里的任何人都可以给我一些基本的例子吗?

However, I'm having trouble figuring out how to have my client retrieve the port number and IP address from the registered service and use this data to open a TCP connection. I've searched for examples of how to use JmDNS but to no avail. Can anyone here give me some basic examples? Or if anyone has any links to good resources/tutorials on JmDNS could they please provide them?

注意:JmDNS是一个必要的工作,所以我很感激只有关于JmDNS的答案。 JmDNS和不提供替代。此外,我已经广泛地查看了JmDNS API,但仍然无法弄清楚,因此请不要将链接发布到文档作为资源。

Note: JmDNS is a neccessity here, so I would appreciate answers pertaining only to JmDNS and not offering an alternative. Also, I have looked at the JmDNS API extensively, and still can't figure it out, so please don't post a link to the docs as a resource.

非常感谢。

推荐答案

服务器端:

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();

一旦你有了 http://192.168.11.2:6666/ myTestService ,可以解析/使用它打开socket连接。希望有帮助。

Once you have the URL http://192.168.11.2:6666/myTestService, you can parse/use it open socket connection. Hope that help.

这篇关于客户端 - 服务器中的JmDNS服务发现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆