WebSocket - 发送第二条消息后,我得到:服务器不得屏蔽它发送到客户端的任何帧

2024-01-12

我成功收到第一条消息,但第二条(相同的消息)我收到错误:

服务器不得屏蔽发送给客户端的任何帧。

它只有一个客户。

  private void RunWebSocketListener()
    {
        int websocket_port = 8996;
        TcpListener websocket = new TcpListener(Address, websocket_port);
        websocket.Start();
        bool websocket_isRunning = true;
        while (websocket_isRunning)
        {
            Console.WriteLine("--- Waiting for WebSocket ----");
            TcpClient websocket_client = websocket.AcceptTcpClient();
            NetworkStream sockStream = websocket_client.GetStream();
            byte[] bRead = new byte[1024];
            sockStream.Read(bRead, 0, bRead.Length);
            Console.WriteLine("---- Reading WebSocket ----");
            string websocket_header = Encoding.UTF8.GetString(bRead);

            string matchs = new System.Text.RegularExpressions.Regex("Sec-WebSocket-Key: (.*)").Match(websocket_header).Groups[1].Value.Trim() + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
            string finakAcceptedKey = Convert.ToBase64String(System.Security.Cryptography.SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(matchs)));

            // write response
            string responseHeader = "";
            responseHeader += "HTTP/1.1 101 Switching Protocols\r\n";
            responseHeader += "Connection: Upgrade\r\n";
            responseHeader += "Upgrade: websocket\r\n";
            responseHeader += "Sec-WebSocket-Accept: "+ finakAcceptedKey +"\r\n";
            responseHeader += "\r\n";
            byte[] sendResponse = Encoding.UTF8.GetBytes(responseHeader);
            sockStream.Write(sendResponse, 0, sendResponse.Length);

            bool clientConnected = true;
            while (clientConnected)
            {
                byte[] msg = this.encodeMessage("{ \"msg\": \"Your message\" }");
                // The Problem Writing on a Second time
                sockStream.Write(msg);
                Console.WriteLine("--- msg Sent "+ msg.Length +" Bytes ---");
                Thread.Sleep(2000);
            }
            Thread.Sleep(2000);
        }
    }

C# 上的 #IOException:

无法将数据写入传输连接:已建立 连接被主机中的软件中止。

JavaScript:

var websocket = new WebSocket("ws://LOCAL:PORT");
websocket.onopen = ....
websocket.onmessage = function(e) { console.log(e.data); }

#JavaScript 错误:

failed: A server must not mask any frames that it sends to the client.
  • 您收到第一条消息吗? [ 是的,我愿意 ]。
  • AcceptTcpClient 到 AcceptSocket [不工作]。
  • 我正在使用“睡眠 2 秒”[ 不起作用 ]。
  • 新线程[不工作]。

固定的, 这this.encodeMessage方法我返回一个更大的字节,

byte[] b = new byte[message.length + 5]

To:

byte[] b = new byte[message.length + 2]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebSocket - 发送第二条消息后,我得到:服务器不得屏蔽它发送到客户端的任何帧 的相关文章

随机推荐