问题描述
- UDP 中的对话
- 支持选择性地禁用多播。
- 以与单播消息相同的方式处理多播消息,但几乎没有限制
我认为我应该使用相同的 UDP 套接字来接收单播和多播数据报。
# udp_multicast_recv.py
# Python version used: 3.9.1
import socket
import struct
host = "224.1.1.1"
# host = "0.0.0.0"
listen_all = True
port = 5683
s = socket.socket(socket.AF_INET,socket.soCK_DGRAM)
if listen_all:
s.bind(("",port))
else:
s.bind((host,port))
mreq = struct.pack("4sl",socket.inet_aton(host),socket.INADDR_ANY)
s.setsockopt(socket.IPPROTO_IP,socket.IP_ADD_MEMBERSHIP,mreq)
data = None
print("Listening")
while True:
# data,addr = s.recvfrom(1024)
data,ancdata,msg_flags,addr = s.recvmsg(1024)
print(addr,":",data,msg_flags)
# udp_multicast_send.py
import socket
dest = "224.1.1.1"
dest = "192.168.86.188"
port = 5683
s = socket.socket(socket.AF_INET,socket.soCK_DGRAM)
s.setsockopt(socket.soL_SOCKET,socket.so_REUSEADDR,1)
s.sendto("Hello world".encode(),(dest,port))
我很快注意到我需要一种方法来区分多播数据报和单播数据报。但是我无法在互联网上找到有关如何实现此目标的解决方案或相关问题。
因此问题:当从同一个套接字接收UDP数据报时,有没有办法判断数据报是单播还是多播?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)