Windows 上の Python3 を IPv4 リンク ローカル マルチキャスト グループ 239.255.0.3 に参加させようとしています。スクリプトをグループ 224.3.29.71 に参加するように構成すると、Windows ファイアウォール プロンプトが表示され、グループに正常に参加してメッセージを受信しました。ただし、グループ アドレスを 239.255.0.3 に変更すると (送信側と受信側の両方で)、メッセージが届かなくなります。どちらの構成でも、Windows に到着するパケットを (Wireshark 経由で) 確認できます。ただし、アプリケーションには届きません。Windows PC (静的 IP 構成) からマルチキャスト パケットを送信している組み込みデバイス (これも静的 IP 構成) に直接接続する 1 本の Ethernet ケーブルがあります。
詳細:
- IPv4 サブネット: 192.168.150.0/24
- 送信機 IP: 192.168.150.2
- 受信側 IP: 192.168.150.5
- 動作中のマルチキャスト アドレス: 224.3.29.71
- 動作しないマルチキャスト アドレス: 239.255.0.3
受信者コード:
import socket
import struct
import sys
multicast_group = '224.3.29.71' # WORKS
#multicast_group = '239.255.0.3' # DOES NOT WORK. OF COURSE I AM CHANGING THE TX SIDE TO MATCH.
address = ('', 32768)
# Create the socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#allow other sockets to bind this port too
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
# Bind to the server address
sock.bind(address)
# Tell the operating system to add the socket to the multicast group
# on all interfaces.
group = socket.inet_aton(multicast_group)
mreq = struct.pack('4sL', group, socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
# Receive loop
while True:
print('\nwaiting to receive message', address[1], file=sys.stderr)
data, address = sock.recvfrom(1024)
print('received %s bytes from %s' % (len(data), address), file=sys.stderr)
print(data.decode(), file=sys.stderr)
239.*.*.* マルチキャスト グループを機能させるために構成する必要がある Windows 設定はありますか?