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