服務器端:
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
,你可以分析/使用開放套接字連接。希望有所幫助。
謝謝,這真的讓事情變得更清晰。由於完全不熟悉Java中的回調(或者任何語言,就此而言),我將如何從回調中檢索服務信息,而不是ServiceInfo []?是否只需要在serviceListener實現之外聲明serviceUrl字符串,以便我可以全局訪問它? –
是的,通常將ServiceListener定義爲內部類,並將serviceUrl定義爲外部類的實例變量。 – yorkw
@yorkw你有可能展開代碼示例以展示如何解析它並打開套接字嗎?我無法找到正確的客戶端套接字連接代碼。 – Radu