编程语言
首页 > 编程语言> > Python多播接收器中的重复数据包

Python多播接收器中的重复数据包

作者:互联网

有一个脚本可以打开套接字并从中读取多播(从Multicast in Python开始)

import socket
import struct

MCAST_GRP = '224.1.1.1'
MCAST_PORT = 1234

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

while True:
  print sock.recv(10240)

只要我不将同一脚本并行运行到另一个多播组,一切都很好,例如,端口是相同的

rtp://224.1.1.1:1234
rtp://224.1.1.2:1234

启动后,第二个脚本开始混乱-第一个脚本看到第二个包,第二个到第一个包.

我尝试做为mcast.py-类似的结果.

为什么会发生这种情况以及如何治愈?

UPD修复

-sock.bind(('', MCAST_PORT))
+sock.bind((MCAST_GRP, MCAST_PORT))

解决方法:

侦听端口上所有传入连接的应用程序将所有消息发送到该端口,无论哪个应用程序发起了多播组成员身份.为了减轻这种情况,通过将每个应用程序指定为要绑定的地址tupel中的第一个参数,让每个应用程序侦听其期望数据的多播地址.

标签:python-2-6,python,multicast
来源: https://codeday.me/bug/20191208/2090201.html