JmDNS 技术文档

此处展示了 JmDNS 库的一些基本信息和示例代码。

JmDNS

JmDNS 是 Java 中多播 DNS 的实现。它支持服务发现和服务注册,并且与 Apple 的 Bonjour 完全兼容。

服务注册示例代码

  [java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.io.IOException; import java.net.InetAddress; import javax.jmdns.JmDNS; import javax.jmdns.ServiceInfo; public class ExampleServiceRegistration { public static void main(String[] args) throws InterruptedException { try { // 创建一个 JmDNS 实例 JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost()); // 注册一个服务 ServiceInfo serviceInfo = ServiceInfo.create("_http._tcp.local.", "example", 1234, "path=index.html"); jmdns.registerService(serviceInfo); // 等待片刻 Thread.sleep(25000); // 注销所有服务 jmdns.unregisterAllServices(); } catch (IOException e) { System.out.println(e.getMessage()); } } }

服务发现示例代码

  [java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import javax.jmdns.JmDNS; import javax.jmdns.ServiceEvent; import javax.jmdns.ServiceListener; public class ExampleServiceDiscovery { private static class SampleListener implements ServiceListener { @Override public void serviceAdded(ServiceEvent event) { System.out.println("添加服务: " + event.getInfo()); } @Override public void serviceRemoved(ServiceEvent event) { System.out.println("移除服务: " + event.getInfo()); } @Override public void serviceResolved(ServiceEvent event) { System.out.println("解析服务: " + event.getInfo()); } } public static void main(String[] args) throws InterruptedException { try { // 创建一个 JmDNS 实例 JmDNS jmdns = JmDNS.create(InetAddress.getLocalHost()); // 添加一个服务监听器 jmdns.addServiceListener("_http._tcp.local.", new SampleListener()); // 等待片刻 Thread.sleep(30000); } catch (UnknownHostException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } } }

以上是 JmDNS 技术文档的翻译。

参考资料

https://github.com/jmdns/jmdns/blob/main/README.md