我如何加入 Rebol 中的 SSDP 多播组?
How do I join the SSDP multicast group in Rebol?
我正在尝试收听 SSDP 多播消息,例如 NOTIFY 和 SEARCH。
这是我的代码,但我没有看到这些消息,即使 wireshark 可以看到它们。那么,如何加入SSDP多播组并接收消息呢?
Rebol []
attempt [close ssdp]
local-ip: read join dns:// read dns://
ssdp: open/binary udp://:8000
probe group: compose/deep [multicast-groups: [[235.255.255.250 (local-ip)]]]
set-modes ssdp group
forever [
port: wait [ssdp]
probe data: copy port
]
下面的代码先发送一个SSDP SEARCH命令来拾取网络上的所有设备,然后监听来自其他设备的SEARCH命令。
REBOL [
Notes: {to listen for SSDP messages. Works on Rebol2}
]
local-ip: read join dns:// read dns://
probe local-ip
attempt [close odata]
attempt [close idata]
odata: open/binary udp://239.255.255.250:1900 ; SSDP multicast port address
set-modes odata [multicast-ttl: 10]
; next line seems unnecessary
; set-modes odata compose/deep [multicast-interface: (local-ip)]
idata: open/binary udp://:1900
set-modes idata compose/deep [multicast-groups: [[239.255.255.250 (local-ip)]]]
ST: "ssdp:all"
MX: 3
insert odata rejoin [
{M-SEARCH * HTTP/1.1} crlf
{HOST: 239.255.255.250:1900} crlf
{MAN: "ssdp:discover"} crlf
{MX: } MX crlf
{ST: } ST crlf
crlf
]
forever [
port: wait [odata idata]
data: copy port
if find/part data {M-SEARCH} 8 [
print "SSDP search issued from:"
print [ "Address: " port/remote-ip]
print [ "On port: " port/remote-port]
]
probe data
]
我正在尝试收听 SSDP 多播消息,例如 NOTIFY 和 SEARCH。
这是我的代码,但我没有看到这些消息,即使 wireshark 可以看到它们。那么,如何加入SSDP多播组并接收消息呢?
Rebol []
attempt [close ssdp]
local-ip: read join dns:// read dns://
ssdp: open/binary udp://:8000
probe group: compose/deep [multicast-groups: [[235.255.255.250 (local-ip)]]]
set-modes ssdp group
forever [
port: wait [ssdp]
probe data: copy port
]
下面的代码先发送一个SSDP SEARCH命令来拾取网络上的所有设备,然后监听来自其他设备的SEARCH命令。
REBOL [
Notes: {to listen for SSDP messages. Works on Rebol2}
]
local-ip: read join dns:// read dns://
probe local-ip
attempt [close odata]
attempt [close idata]
odata: open/binary udp://239.255.255.250:1900 ; SSDP multicast port address
set-modes odata [multicast-ttl: 10]
; next line seems unnecessary
; set-modes odata compose/deep [multicast-interface: (local-ip)]
idata: open/binary udp://:1900
set-modes idata compose/deep [multicast-groups: [[239.255.255.250 (local-ip)]]]
ST: "ssdp:all"
MX: 3
insert odata rejoin [
{M-SEARCH * HTTP/1.1} crlf
{HOST: 239.255.255.250:1900} crlf
{MAN: "ssdp:discover"} crlf
{MX: } MX crlf
{ST: } ST crlf
crlf
]
forever [
port: wait [odata idata]
data: copy port
if find/part data {M-SEARCH} 8 [
print "SSDP search issued from:"
print [ "Address: " port/remote-ip]
print [ "On port: " port/remote-port]
]
probe data
]