(group)
| 49 | |
| 50 | |
| 51 | def receiver(group): |
| 52 | # Look up multicast group address in name server and find out IP version |
| 53 | addrinfo = socket.getaddrinfo(group, None)[0] |
| 54 | |
| 55 | # Create a socket |
| 56 | s = socket.socket(addrinfo[0], socket.SOCK_DGRAM) |
| 57 | |
| 58 | # Allow multiple copies of this program on one machine |
| 59 | # (not strictly needed) |
| 60 | s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) |
| 61 | |
| 62 | # Bind it to the port |
| 63 | s.bind(('', MYPORT)) |
| 64 | |
| 65 | group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0]) |
| 66 | # Join group |
| 67 | if addrinfo[0] == socket.AF_INET: # IPv4 |
| 68 | mreq = group_bin + struct.pack('=I', socket.INADDR_ANY) |
| 69 | s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) |
| 70 | else: |
| 71 | mreq = group_bin + struct.pack('@I', 0) |
| 72 | s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq) |
| 73 | |
| 74 | # Loop, printing any data we receive |
| 75 | while True: |
| 76 | data, sender = s.recvfrom(1500) |
| 77 | while data[-1:] == '\0': data = data[:-1] # Strip trailing \0's |
| 78 | print(str(sender) + ' ' + repr(data)) |
| 79 | |
| 80 | |
| 81 | if __name__ == '__main__': |
no test coverage detected