服务器端:
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