使用"UPnP"宣布我的服务



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

到目前为止的代码:

String NOTIFY
            = "NOTIFY * HTTP/1.1rn"
            + "NTS:ssdp:alivern"
            + "Location: http://192.168.1.10rnrn";
    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 中没有列出任何内容。消息可能没有适当的格式?

您需要在公告中包含其他字段 - NTUSN

您需要为 NT 标头发送 3+num_services 个具有不同值的公告:

  • UPNP:根设备
  • uuid
  • 设备类型
  • 服务
  • 类型(您的设备提供的每项服务一个)

USN标头也随这些而变化。 有关详细信息,请参阅 UPnP 论坛的文档包中的设备体系结构文档 1.2.2 设备可用 - 使用 ssdp:alive 进行通知。

相关内容

最新更新