从同一个套接字接收 UDP 数据报时,有没有办法区分单播和多播?

问题描述

我有一个应用程序可以:

  • 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...