Я пытаюсь заставить Python3 на Windows присоединиться к группе многоадресной рассылки IPv4 Link Local 239.255.0.3. Когда я настроил свой скрипт для присоединения к группе 224.3.29.71, я получил приглашение брандмауэра Windows, и я успешно присоединился к группе и начал получать сообщения. Но когда я изменил адрес группы на 239.255.0.3 (и на передатчике, и на приемнике), сообщения больше не проходят. В обеих конфигурациях я вижу (через Wireshark) пакеты, поступающие в Windows. Но они не поступают в мое приложение. У меня есть один кабель Ethernet, идущий напрямую от моего ПК с Windows (статическая конфигурация 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)
Нужно ли мне настроить какие-то параметры Windows, чтобы разрешить работу групп многоадресной рассылки 239.*.*.*?