Websockets 将 byte[] 转换为字符串

Ama*_*rsh 3 .net c# arrays buffer websocket

我有以下代码:

            Console.WriteLine("New Socket connection opened");
            var buffer = new byte[1024 * 4];
            WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
            while (!result.CloseStatus.HasValue)
            {
                Console.WriteLine("New message received : "+ Encoding.UTF8.GetString(buffer));
            }
Run Code Online (Sandbox Code Playgroud)

当我发送Hello我的客户端时,我可以Hello?????????????在控制台上看到。显然,这意味着我有一个 size 的缓冲区1024 * 4,其中的前几个字节由Hello. 我如何处理trim我的字符串(最终,我想将 JSON 从我的客户端传递到服务器)。

AAA*_*ddd 5

基本上约翰回答了这个

WebSocketReceiveResult.Count 属性

表示 WebSocket 接收的字节数。

在两种情况下,Count 可以为 0:

WebSocket 收到一条空消息。在这种情况下,CloseStatus 属性为 None。

WebSocket 收到来自远程端点的关闭消息。在这种情况下,CloseStatus 属性设置为 None 以外的值。

GetString(Byte[], Int32, Int32)

public virtual string GetString (byte[] bytes, int index, int count);
Run Code Online (Sandbox Code Playgroud)

在派生类中重写时,将指定字节数组中的字节序列解码为字符串。

  • bytesByte[]包含要解码的字节序列的字节数组。
  • indexInt32要解码的第一个字节的索引。
  • countInt32要解码的字节数。

所以你需要这样的东西

Console.WriteLine("New message received : "+ Encoding.UTF8.GetString(buffer,0,Result.Count));
Run Code Online (Sandbox Code Playgroud)

然而,它是一个很大的然而。还有更多错误,我会认真建议获得一个好的WebSocket教程和一些防弹(典型)设计