def recv(self, callback):
# Look up multicast group address in name server and find out IP version
addrinfo = socket.getaddrinfo(self.group, None)[0]
# Create a socket
s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
# Allow multiple copies of this program on one machine
# (not strictly needed)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Bind it to the port
s.bind(('', self.port))
group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
# Join group
if addrinfo[0] == socket.AF_INET: # IPv4
mreq = group_bin + struct.pack('=I', socket.INADDR_ANY)
s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
# Loop, printing any data we receive
while True:
if callback == None:
return
data, sender = s.recvfrom(1500)
data = data.decode()
while data[-1:] == '\0': data = data[:-1] # Strip trailing \0's
#callback(sender, data.split(':'))
callback.put([sender, data])
评论列表
文章目录