Websockets将byte[]转换为字符串

3

我有以下代码:

            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));
            }

当我向客户端发送Hello时,控制台上显示的是Hello?????????????。显然,这意味着我有一个大小为1024 * 4的缓冲区,其中前几个字节被Hello占用了。我该如何trim我的字符串(最终,我想从客户端向服务器传递JSON)。


2
.Count 是什么? - ProgrammingLlama
buffer.Count() 和 buffer.Length() 都返回 4096 - Amarsh
你能展示一下发送消息的代码吗? - ProgrammingLlama
https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/websockets?view=aspnetcore-2.1 - 我所尝试做的就是将消息 Console.WriteLine()。 - Amarsh
1个回答

5

基本上John已经回答了这个问题。

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);

在派生类中被重写,将指定的字节数组中的一系列字节解码为字符串。
  • bytes Byte[] 包含要解码的一系列字节的字节数组。
  • index Int32 要解码的第一个字节的索引。
  • count Int32 要解码的字节数。
Console.WriteLine("New message received : "+ Encoding.UTF8.GetString(buffer,0,Result.Count));

然而,这里有一个重要的问题。还有更多的问题可能会出现,我强烈建议您找一个好的WebSocket教程和一些经过验证的(典型)设计。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接