WebSocket与'ws:// X'的连接失败:WebSocket握手时出错:'Upgrade'标头丢失

问题描述 投票:0回答:1

我在C#中有一个项目,该项目使用HttpListener侦听到端口8080的请求,如果它是一个websocket请求,我将对其进行处理。这是一个代码段:

        var server = new HttpListener();
        server.Prefixes.Add("http://+:8080/");
        server.Start();
        log.Info(string.Format("TCPServer has started, Waiting for a connection..."));

        while (true)
        {
            HttpListenerContext listenerContext = server.GetContext();
            log.Info("A client connected.");

            if (listenerContext.Request.IsWebSocketRequest)
            {
                WebSocket webSocket = null;

                try
                {
                    WebSocketContext webSocketContext = await listenerContext.AcceptWebSocketAsync(null);

                    webSocket = webSocketContext.WebSocket;
                    byte[] receiveBuffer = new byte[1024];

                    while (webSocket.State == WebSocketState.Open)
                    {
                        WebSocketReceiveResult receiveResult = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None);
                        Process();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception: {0}", e);
                }
                finally
                {
                    if (webSocket != null)
                        webSocket.Dispose();
                }
           }
      }

现在,我有一个使用标准WebSocket库的Angular客户端:

    ws = new WebSocket("ws://X:8080/");

    // Connection opened
    ws.addEventListener('open', this.onOpen);

    // Connection closed
    ws.addEventListener('close', this.onClose);

    // Listen for messages
    ws.addEventListener('message', this.onMessage);

    // Listen for possible errors
    ws.addEventListener('error', this.onError);

当我同时运行客户端和服务器时,两者都运行良好。当我将服务器代码部署到远程服务器(同时尝试了远程计算机和AWS EC2实例)时,尝试通过客户端连接时出现以下错误:

与'ws:// X:8080 /'的WebSocket连接失败:WebSocket握手期间出错:'升级'标头丢失

在Chrome开发工具的“网络”标签中,我确实看到了该标头的存在,并且正如我说的,当服务器是本地服务器时它可以工作,但是在远程服务器中,该标头似乎由于某种原因而消失了。

有人可以帮我吗?在此先感谢

c# angular websocket httplistener
1个回答
0
投票

我建议您不要将域名用于Web套接字。用IP地址填写URI。

© www.soinside.com 2019 - 2024. All rights reserved.