使用Javascript(upnp M-SEARCH)广播消息和获取响应

本文关键字:消息 获取 响应 广播 Javascript upnp M-SEARCH 使用 | 更新日期: 2023-09-27 18:28:22

我想向我的DLNA服务器发送和MSearch请求,并使用Javascript获取响应。我已经用C#实现了代码,但我需要用javascript实现,因为我正在编写Chrome插件(Html、JS、CSS)。问题是我不太了解Js,我读过Node.Js的文档,但无法理解

这是我的C#代码

    public void search()
    {                                                                 
        IPEndPoint LocalEndPoint = new IPEndPoint(IPAddress.Any, 6000);  to 1900 to 
        IPEndPoint MulticastEndPoint = new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900);
        Socket UdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
        UdpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
        UdpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
        UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 2);
        UdpSocket.Bind(LocalEndPoint);
        UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.255.255.250"), LocalEndPoint.Address));

        Console.WriteLine("UDP-Socket setup done...'r'n");
        string SearchString = "M-SEARCH * HTTP/1.1'r'nHOST:239.255.255.250:1900'r'nMAN:'"ssdp:discover'"'r'nST:urn:schemas-upnp-org:device:MediaServer:1 'r'nMX:3'r'n'r'n"; //Wifi router connectify: => ST:urn:schemas-upnp-org:device:WANConnectionDevice:1
        UdpSocket.SendTo(Encoding.UTF8.GetBytes(SearchString), SocketFlags.None, MulticastEndPoint);  // ==> HTTPMU broadcast
        UdpSocket.SendTo(Encoding.UTF8.GetBytes(SearchString), SocketFlags.None, MulticastEndPoint);
        UdpSocket.SendTo(Encoding.UTF8.GetBytes(SearchString), SocketFlags.None, MulticastEndPoint); 
        Console.WriteLine("M-Search sent...'r'n");
        byte[] ReceiveBuffer = new byte[64000];
        int ReceivedBytes = 0;
        while (true)
        {
            if (UdpSocket.Available > 0)
            {
                ReceivedBytes = UdpSocket.Receive(ReceiveBuffer, SocketFlags.None);                     
                if (ReceivedBytes > 0)
                {
                    string responseString = Encoding.UTF8.GetString(ReceiveBuffer, 0, ReceivedBytes);
                    if (!responseString.Contains("Windows/6.8 UPnP/1.1 Guru")) continue;
                    string url = GetResourceUriFromHTTPResp(responseString);
                    if (!string.IsNullOrEmpty(url))
                    {
                        Console.WriteLine(url);
                        UdpSocket.Close();
                        break;
                    }
                }
            }
        }
    }

我的主要目标是获取服务器的url,当用户点击插件时,导航到url。

如果我唯一的选择是使用像Node.js这样的外部javascript库,请用简单的语言向我解释如何引用库以使我能够使用它的函数。

使用Javascript(upnp M-SEARCH)广播消息和获取响应

  1. 您不能从chrome扩展使用chrome.socket API。因此,无法通过扩展的代码
  2. 您可以使用node.js来完成这项工作,但不能引用chrome扩展中的node.js,因为它不是"外部的"javascript库",但独立的javascript平台
  3. 完成任务的方法是在chrome扩展和DLNA服务器之间使用一些代理,它将侦听来自扩展的http请求,并将数据传递到DLNA服务器,然后从服务器返回到扩展。当然,这个代理可以用node.js编写,但您也可以为此使用ASP.NET平台,尤其是如果您了解C#的话