用“UPnP”宣布我的服务

时间:2013-12-22 16:13:42

标签: java web-services upnp

我有一个Web服务,在启动时我想通过UPnP兼容的NOTIFY向本地网络宣布该服务。如果可能的话,我将不会包含lib(如cling)并尽可能简化。

到目前为止的代码:

String NOTIFY
            = "NOTIFY * HTTP/1.1\r\n"
            + "NTS:ssdp:alive\r\n"
            + "Location: http://192.168.1.10\r\n\r\n";

    InetAddress addr;
    MulticastSocket socket;
    DatagramPacket dp;

    try {
        addr = InetAddress.getByName("239.255.255.250");
        socket = new MulticastSocket(1900);
        socket.setReuseAddress(true);
        socket.setSoTimeout(3000);
        socket.joinGroup(addr);

        byte[] buf = NOTIFY.getBytes("UTF-8");
        dp = new DatagramPacket(buf, buf.length, addr, 1900);

        // send out 10 notifys, then stop to send
        for (int i = 10; i > 0; i--) {
            socket.send(dp);
            Thread.sleep(3000);
        }
    } catch (Exception ex) {
        System.err.println(ex);
    }

我正在使用Clink工作台进行检查,但我没有在UI中列出任何内容。这个消息是否合适不合适?

1 个答案:

答案 0 :(得分:1)

您需要在公告中添加其他字段 - NTUSN

您需要发送3 + num_services公告,其中包含NT标题的不同值:

  • 的upnp:rootdevice
  • UUID
  • 设备类型
  • 服务类型(您的设备提供的每项服务一种)

USN标题也因此而异。有关详细信息,请参阅UPnP论坛的docs bundle中的设备体系结构文档,1.2.2可用设备 - 带有ssdp:alive的NOTIFY。