def discover(self):
ws = None
usn = None
apiV = None
srv = None
req = ('M-SEARCH * HTTP/1.1\r\n' +
'MX: 10\r\n' +
'HOST: 239.255.255.250:1900\r\n' +
'MAN: \"ssdp:discover\"\r\n' +
'NT: panono:ball-camera\r\n' +
'\r\n')
ws = None
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.settimeout(7)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
mcast = struct.pack('4sL', socket.inet_aton('239.255.255.250') , socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mcast)
sock.bind(('', 1900))
try:
sock.sendto( req.encode(), ('239.255.255.250', 1900))
except socket.error as e:
print(e)
return (None, None, None)
for _ in range(5):
try:
data, addr = sock.recvfrom(1024)
if not data: continue
ws = ssdpNotify().getLocation(data)
if ws is None: continue
usn = ssdpNotify().getUsn(data)
apiV = ssdpNotify().getApiVersion(data)
srv = ssdpNotify().getSrv(data)
break
except socket.error as e:
print(e)
break
sock.close()
return (ws, usn, apiV, srv)
评论列表
文章目录