廢話少說,直接上**。服務端ssdp_server.py:
# 繫結到任意位址和ssdp組播埠上
self.__s.bind((any_ip, ssdp_port))
# info: 使用預設值
# self.__s.setsockopt(socket.sol_ip, socket.ip_multicast_ttl, 20)
# self.__s.setsockopt(socket.sol_ip, socket.ip_multicast_loop, 1)
# self.__s.setsockopt(socket.sol_ip, socket.ip_multicast_if,
# socket.inet_aton(intf) + socket.inet_aton('0.0.0.0'))
# info: 新增到多播組
self.__s.setsockopt(socket.sol_ip, socket.ip_add_membership,
socket.inet_aton(ssdp_addr) + socket.inet_aton(local_ip))
self.local_ip = local_ip
def start(self):
while true:
data, addr = self.__s.recvfrom(2048)
conn = connection(self.__s, data, addr)
conn.handle_request()
self.__s.setsockopt(socket.sol_ip, socket.ip_drop_membership,
socket.inet_aton(ssdp_addr) + socket.inet_aton(self.local_ip))
self.__s.close()
if __name__ == '__main__':
port = ssdpserver()
port.start()
客戶端ssdp_client.py:
# info: 若繫結,服務端收到的是固定的位址和埠號
self.__s.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)
local_ip = socket.gethostbyname(socket.gethostname())
self.__s.bind((local_ip, 50000))
def start(self):
self.__send_search()
while true:
reads, _, _ = select.select([self.__s], , , 5)
if reads:
data, addr = self.__s.recvfrom(2048)
conn = ssdp_server.connection(self.__s, data, addr)
conn.handle_request()
if conn.is_find_service:
break
else: # timeout
self.__send_search()
self.__s.close()
def __send_search(self):
print "sending m-search..."
# info: 傳送到ssdp組播位址上
self.__s.sendto(ms, (ssdp_addr, ssdp_port))
if __name__ == '__main__':
port = ssdpclient()
port.start()
SSDP協議基礎
ssdp協議,不知道大家是否聽說過呢?這個協議的使用多出現在埠當中。下面我們就來了解一下這個協議的具體內容吧。什麼是ssdp協議呢?ssdp就是簡單服務發現協議 ssdp,service discovery protocol 是一種應用層協議,是構成通用即插即用 upnp 技術的核心協議之一。簡單服...
SSDP協議內容解析
ssdp service discovery protocol 簡單服務發現協議,用於發現區域網裡面的裝置和服務。ssdp訊息分為裝置查詢訊息 裝置通知訊息兩種,通常情況下,使用更多地是裝置查詢訊息。1 裝置查詢訊息 格式例子如下 其中第一行是訊息頭,固定 host對應的是廣播位址和埠,239.25...
關於SSDP協議的基礎知識
ssdp就是簡單服務發現協議 servicediscoveryprotocol 是一種應用層協議,它是構成通用即插即用 也就是upnp,upnp是各種各樣的智慧型裝置 無線裝置和個人電腦等實現遍布全球的對等網路連線的結構 技術的核心協議之一。簡單服務發現協議提供了在區域性網路裡面發現裝置的機制。控制...