Windows에서 Python3을 IPv4 링크 로컬 멀티캐스트 그룹 239.255.0.3에 가입시키려고 합니다. 그룹 224.3.29.71에 가입하도록 스크립트를 구성했을 때 Windows 방화벽 프롬프트가 표시되었고 그룹에 성공적으로 가입하여 메시지를 받았습니다. 그러나 그룹 주소를 239.255.0.3(송신기와 수신자 모두에서)으로 변경하면 메시지가 더 이상 전달되지 않습니다. 두 구성 모두에서 (Wireshark를 통해) Windows에 도착하는 패킷을 볼 수 있습니다. 하지만 내 신청서에는 도착하지 않습니다. Windows PC(고정 IP 구성)에서 멀티캐스트 패킷(또한 고정 IP 구성)을 전송하는 내장 장치까지 직접 연결되는 단일 이더넷 케이블이 있습니다.
세부:
- 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 설정이 있습니까?