は(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)
すべては私が同じスクリプトに平行に実行しない限り、罰金ですがあります2番目のスクリプトを起動した後、別のマルチキャストグループが、ポート同じである、例えば
rtp://224.1.1.1:1234
rtp://224.1.1.2:1234
は混乱を開始 - 最初のスクリプトは、第2および第1の第2のパケットを見ます。
私はmcast.pyとしてやってみました - 同様の結果。
どうしてこのようなことが起こり、治癒するのですか?
UPD修正
-sock.bind(('', MCAST_PORT))
+sock.bind((MCAST_GRP, MCAST_PORT))
明らかに、 'socket'モジュールがスレッドセーフではないという問題がありましたが(http://bugs.python.org/issue1544279)、これはPython 2.5以降で修正されています。 – JAB
今日私はpython3でこのスクリプトを実行しようとしました - 結果は同じです。 – azhurb
Wait ...空のホストにソケットをバインドして後でホストを割り当てると、どのような影響がありますか? – JAB