Обнаружение сервиса JmDNS в клиент-сервере - PullRequest
11 голосов
/ 18 ноября 2011

Я пытаюсь включить обнаружение службы в моем клиент-серверном приложении с использованием JmDNS.Я полностью понимаю реестр служб на стороне сервера с кодом, похожим на этот:

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

Однако у меня возникают проблемы с выяснением того, как мой клиент может получить номер порта и IP-адрес из зарегистрированной службыи использовать эти данные, чтобы открыть TCP-соединение.Я искал примеры того, как использовать JmDNS, но безрезультатно.Может ли кто-нибудь здесь привести некоторые основные примеры?Или, если у кого-нибудь есть ссылки на хорошие ресурсы / учебные пособия по JmDNS, могут ли они их предоставить?

Примечание: JmDNS - это необходимость здесь, поэтому я был бы признателен за ответы, относящиеся только к JmDNS, и не предлагая альтернативу.Кроме того, я подробно изучил API JmDNS и до сих пор не могу понять его, поэтому, пожалуйста, не размещайте ссылку на документы в качестве ресурса.

Спасибо.

1 Ответ

20 голосов
/ 20 ноября 2011

Сторона сервера:

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

Как только у вас есть URL http://192.168.11.2:6666/myTestService, вы можете анализировать / использовать его с открытым сокетом соединения.Надеюсь, что поможет.

...