gpt4 book ai didi

python-3.x - SSDP M-search不适用于单播-单个IP

转载 作者:行者123 更新时间:2023-12-03 12:08:05 25 4
gpt4 key购买 nike

SSDP M搜索发现请求非常适合多播地址239.255.255.250。但是,我有一个要求将此请求发送到特定IP。这没用。根据UPnP architecture document支持单播发现消息,与多播消息有微小差异

多播消息是M-SEARCH * HTTP/1.1
HOST:239.255.255.250:1900
MAN:ssdp:discover
ST:ssdp:all
MX:1

单播消息类似-除了将多播IP更改为特定IP并删除MX:1(根据规范-找不到用于单播发现m-search的任何代码示例)

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 32)
msg = 'M-SEARCH * HTTP/1.1\r\nHOST:239.255.255.250:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\nMX:1\r\n\r\n'
s.sendto(msg.encode('utf-8'), ('239.255.255.250', 1900))
resp = s.recv(1024)
print (resp)

这很好用。但是以下不是-recv()调用超时

sock_1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
msg = 'M-SEARCH * HTTP/1.1\r\nHOST:<specific ip>:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\n\r\n'
sock_1.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 32)
sock_1.settimeout(30)
sock_1.sendto(msg.encode('utf-8'), ('<specific ip>', 1900))
resp = sock_1.recv(1024)

我尝试了更多的'setsockopt'变体,但没有奏效。
如果有任何可能的线索,请分享-可能是从设备端响应1900年的多播,而不是单播消息?

提前致谢!

最佳答案

msg = 'M-SEARCH * HTTP/1.1\r\nHOST:<specific ip>:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\n'

您最后缺少最后一个 \r\n(用于 header 结尾的空行:没有它,接收方将继续等待更多)。

关于python-3.x - SSDP M-search不适用于单播-单个IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57724950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com