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