有一个脚本可以打开套接字并从中读取多播(来自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 Fix
-sock.bind(('', MCAST_PORT))
+sock.bind((MCAST_GRP, MCAST_PORT))