簡體   English   中英

如何訂閱 UPnP 事件

[英]How to subscribe to UPnP events

對於大多數人來說,這應該是一個簡單的HttpRequestMessage問題。 我正在嘗試向 UPnP 設備發送訂閱請求,如UPnP 設備架構文檔第 4.1.2 節所述,我需要發送的消息應該如下所示:

SUBSCRIBE publisher path HTTP/1.1
HOST: publisher host:publisher port  
USER-AGENT: OS/version UPnP/1.1 product/version  
CALLBACK: <delivery URL>  
NT: upnp:event  
TIMEOUT: Second-requested subscription duration 

顯然,其中大部分是非常簡單的。 我對一些項目有疑問,因為我目前的方法不起作用。 我從服務器返回一個NotFound

請求行SUBSCRIBE 發布者路徑 HTTP/1.1與我創建 WebRequest ( WebRequest.Create(...) ) 時相同還是我可以在某處設置屬性?

在這種情況下SUBSCRIBEHttpMethod還是GetPOSTPUT等?

這是當前的請求代碼:

var request = WebRequest.Create(new Uri(eventUri)) as HttpWebRequest;

request.Method = "SUBSCRIBE";
request.UserAgent = "MyTab/1.0 UPnP/1.1 TestApp/1.0";
request.Headers["CALLBACK"] = "<" + hostname.DisplayName + ":8088>";
request.Headers["NT"] = "upnp:event";
request.Headers["TIMEOUT"] = "Second-300";

看起來我一切都正確,除了我忘記將http://附加到回調 url 。

對於登陸這里並想知道 UPNP 訂閱如何運作的其他人。 這是一個非常簡化的使用示例。

我將使用 netcat 打開一個端口並使用 HTTP 200 響應傳入事件。為了初始化連接,我將使用 curl。 這適用於預裝 curl 和 nc 的 Ubuntu 19.10。

curl -v http://192.168.1.47:58424/RenderingControl/evt -H "CALLBACK: <http://192.168.1.32:1234>" -H "NT: upnp:event" -H "TIMEOUT: Second-1800" -X SUBSCRIBE

這里http://192.168.1.47:58424/RenderingControl/evt是注冊到事件的設備特定 URL。 CALLBACK標頭指定運行我們的 netcat 服務器的端口和 IP 地址。 如前所述,在這里添加http://很重要。

偵聽並發送 HTTP OK 的服務器運行如下:

while true; do echo -e 'HTTP/1.1 200 OK\r\nContent-length: 0\r\nConnection: close\r\n\r\n' | nc -l 1234; done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM