当从同一套接字接收UDP数据报时,是否有方法区分单播和多播?

2024-06-16 10:27:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份申请,需要:

  • 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, ancdata, 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数据报时,有没有办法判断数据报是单播还是多播


Tags: 数据pyimporthost消息dataportsocket