【问题标题】:Announce my service with "UPnP"用“UPnP”宣布我的服务
【发布时间】:2013-12-22 16:13:41
【问题描述】:

我有一个 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 中列出任何内容。可能该消息未格式化?

【问题讨论】:

    标签: java web-services upnp


    【解决方案1】:

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

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

    • upnp:root 设备
    • uuid
    • 设备类型
    • 服务类型(您的设备提供的每种服务一种)

    USN 标头也因这些而异。有关详细信息,请参阅 UPnP 论坛的docs bundle 中的设备架构文档,1.2.2 Device available - NOTIFY with ssdp:alive。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 2013-09-05
      • 1970-01-01
      • 2016-06-22
      • 2017-12-28
      • 1970-01-01
      相关资源
      最近更新 更多