JmDNS 技术文档

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

JmDNS

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

服务注册示例代码

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());
        }
    }
}

服务发现示例代码

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