【问题标题】:Broadcast message and Get response using Javascript (upnp M-SEARCH)使用 Javascript (upnp M-SEARCH) 广播消息并获取响应
【发布时间】:2013-08-21 08:16:47
【问题描述】:

我想向我的 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 库,请用简单的语言向我解释如何引用该库以使我能够使用它的功能。

【问题讨论】:

    标签: c# javascript node.js sockets google-chrome-extension


    【解决方案1】:
    1. 您不能使用 chrome 扩展中的 chrome.socket API。 因此,无法与 DLNA 服务器进行通信 扩展的代码。
    2. 您可以使用 node.js 完成工作,但不能 从 chrome 扩展中引用 node.js,因为它不是“外部的” javascript 库”,但独立的 javascript 平台。
    3. 完成这些事情的方法是在 chrome 扩展程序和 DLNA 服务器之间使用一些代理,它会侦听来自您的扩展程序的 http 请求,并将数据传递到 DLNA 服务器并从服务器传回扩展程序。当然,我们可以用 node.js 编写这个代理,但您也可以使用 ASP.NET 平台来实现此目的,尤其是如果您了解 C#。

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多