无法从c#连接websocket(wss)

时间:2018-02-20 07:48:12

标签: javascript c# google-chrome-extension websocket

在我的应用程序中,我使用websocket连接chrome扩展和windows应用程序, Javascript代码:

var socket = new WebSocket('ws://172.xx.xxx.xx:11223/');
socket.onopen = function(event)
{
    // Web Socket is connected, send data using send()
    socket.send("hi..");
};

和C#代码:

public static TcpListener Weblistener = null;
public static int selWebSocketPort = 0;
public static void StartListeningSahi()
{
    Weblistener = new TcpListener(IPAddress.Parse(ipAddStr), portNumForSelenium);
    try{
        Weblistener.Start();
        int TestingCycle = 100;
        // Start listening for connections.
        while (TestingCycle > 0){
            TcpClient handler = Weblistener.AcceptTcpClient();
            // An incoming connection needs to be processed.
            lock (ClientSockets.SyncRoot){
                if (handler != null){
                    int i = ClientSockets.Add(new ClientHandler(handler));
                    ((ClientHandler)ClientSockets[i]).Start();
                    SelWebSocketPort = (handler.Client.RemoteEndPoint as IPEndPoint).Port;
                    NetworkStream networkStream = handler.GetStream();
                    Byte[] clientReq = new Byte[handler.Available];
                    networkStream.Read(clientReq, 0, clientReq.Length);
                    string headerRequest = Encoding.UTF8.GetString(clientReq);
                    SendResponseToWebSocket(handler, networkStream, headerRequest);
                }
                else
                    continue;
            }
        }
        Weblistener.Stop();
    }
    catch (Exception e){
        Console.WriteLine(e.ToString());
    }
}

public static void SendResponseToWebSocket(TcpClient handler, NetworkStream networkStream, string headerRequest)
{
    // generate accept key fromm client header request
    var key = headerRequest.Replace("ey:", "`")
                     .Split('`')[1]                     
                     .Replace("\r", "").Split('\n')[0]  
                     .Trim();
    var responseKey = AcceptKey(ref key);
    //create the response for the webclient
    var newLine = "\r\n";
    var response = "HTTP/1.1 101 Switching Protocols" + newLine
                 + "Upgrade: websocket" + newLine
                 + "Connection: Upgrade" + newLine
                 + "Sec-WebSocket-Accept: " + responseKey + newLine + newLine;
    //send respose to the webclient
    Byte[] sendBytes = Encoding.ASCII.GetBytes(response);
    networkStream.Write(sendBytes, 0, sendBytes.Length);
    networkStream.Flush();

    selWebSocketPort = (handler.Client.RemoteEndPoint as IPEndPoint).Port;
}

这适用于http网站。但之后我将此javascript行var socket = new WebSocket('ws://172.xx.xxx.xx:11223/');更改为var socket = new WebSocket('wss://172.xx.xxx.xx:11223/');以支持https个网站,但无法执行此操作。我在chrome上遇到错误 -

  

与'wss://172.16.106.22:11223 /'的WebSocket连接失败:WebSocket打开握手超时

握手正在失败,因为在请求标题中我得到了一些垃圾值。 我错过了什么吗?

0 个答案:

没有答案