Ich versuche, Python3 unter Windows dazu zu bringen, einer IPv4 Link Local-Multicast-Gruppe 239.255.0.3 beizutreten. Als ich mein Skript so konfigurierte, dass es der Gruppe 224.3.29.71 beitritt, erhielt ich eine Eingabeaufforderung der Windows-Firewall und bin der Gruppe erfolgreich beigetreten und habe Nachrichten empfangen. Aber wenn ich die Gruppenadresse auf 239.255.0.3 ändere (sowohl auf dem Sender als auch auf dem Empfänger), kommen die Nachrichten nicht mehr durch. In beiden Konfigurationen kann ich (über Wireshark) die Pakete sehen, die in Windows ankommen. Aber sie kommen nicht in meiner Anwendung an. Ich habe ein einzelnes Ethernet-Kabel, das direkt von meinem Windows-PC (statische IP-Konfiguration) zum eingebetteten Gerät führt, das die Multicast-Pakete überträgt (ebenfalls statische IP-Konfiguration).
Einzelheiten:
- IPv4-Subnetz: 192.168.150.0/24
- Sender-IP: 192.168.150.2
- Empfänger-IP: 192.168.150.5
- Funktionierende Multicast-Adresse: 224.3.29.71
- Nicht funktionierende Multicast-Adresse: 239.255.0.3
Empfängercode:
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)
Gibt es einige Windows-Einstellungen, die ich konfigurieren muss, damit 239.*.*.* Multicast-Gruppen funktionieren?