1

私はJmDNSの例を作成しました:

public class Service {
public static void main(String[] args) {
    try {
        JmDNS mdnsServer = null;

        mdnsServer = JmDNS.create("localhost");

        // Register a test service.
        ServiceInfo testService = ServiceInfo.create("_myTest._tcp.local.", "Test-Service", 3, "test_service");
        mdnsServer.registerService(testService);
    } catch (IOException e) {
        e.printStackTrace();  
    }

}

}

数秒間実行されてからプログラムを終了するので、ブロックしているかブロックしていないか疑問に思っています。ネットワーク経由でサービスをブロードキャストするので、アプリケーションを手動で終了する必要があると考えていました

以下についても同様ですServiceDiscovery

public class ServiceDiscovery {
private static ServiceListenerClass listener;
private static int count = 0;

public static void main(String[] args) throws IOException {
    JmDNS jmdns = null;
    InetAddress address = null;
    String type = "_myTest._tcp.local.";
        Enumeration<NetworkInterface> ifc = NetworkInterface.getNetworkInterfaces();
        while (ifc.hasMoreElements()) {
            NetworkInterface anInterface = ifc.nextElement();
            if (anInterface.isUp()) {
                Enumeration<InetAddress> addr = anInterface.getInetAddresses();
                while (addr.hasMoreElements()) {
                    if (!(address = addr.nextElement()).isLoopbackAddress())
                        break;
                }
            }
        }
        jmdns = JmDNS.create(address, type);
        listener = new ServiceListenerClass();
        jmdns.addServiceListener(type, listener);
}

public static class ServiceListenerClass implements ServiceListener {
    public void serviceAdded(ServiceEvent event) {
        event.getDNS().requestServiceInfo(event.getInfo().getServer(), event.getName(), true);
    }

    public void serviceRemoved(ServiceEvent event) {
        System.out.println((count--) + " " + event.getInfo().getName());
    }

    public void serviceResolved(ServiceEvent event) {
        System.out.println((count++) + " :Res: " + event.getInfo().getName() + " " + event.getInfo().getPort() + " " + event.getInfo().getApplication()
                + " " + event.getInfo().getDomain() + " " + event.getInfo().getKey());
        for (InetAddress address : event.getInfo().getInetAddresses())
            System.out.println(address.getHostAddress());
    }
}

}

4

1 に答える 1

0

保証なし: JmDNS.createは非ブロッキングであり、ブロッキングしているのはjmdns.registerService()メソッドです。

于 2012-09-07T05:36:42.753 に答える