我有一个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中列出任何内容。这个消息是否合适不合适?
答案 0 :(得分:1)
您需要在公告中添加其他字段 - NT
和USN
您需要发送3 + num_services公告,其中包含NT
标题的不同值:
USN
标题也因此而异。有关详细信息,请参阅UPnP论坛的docs bundle中的设备体系结构文档,1.2.2可用设备 - 带有ssdp:alive的NOTIFY。