Обнаружение сервиса JmDNS в клиент-сервере

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

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

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

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

Благодарю.

1 ответ

Решение

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

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, вы можете разобрать / использовать его с открытым сокетом. Надеюсь, что поможет.

Другие вопросы по тегам