Веб-сокеты конвертируют byte [] в строку - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть следующий код:

            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 от моего клиента на сервер).

1 Ответ

0 голосов
/ 14 сентября 2018

В основном Джон ответил на это

Свойство WebSocketReceiveResult.Count

Указывает количество байтов, полученных WebSocket.

Количество может быть 0 в двух случаях:

WebSocket получил пустое сообщение.В этом случае свойство CloseStatus имеет значение None.

WebSocket получил сообщение о закрытии от удаленной конечной точки.В этом случае свойству CloseStatus присваивается значение, отличное от None.

GetString (Byte [], Int32, Int32)

public virtual string GetString (byte[] bytes, int index, int count);

При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в строку.

  • байтов Byte[] Массив байтов, содержащий последовательность байтов для декодирования.
  • index Int32 Индекс первого байта для декодирования.
  • count Int32 Количество байтов для декодирования.

Так что вам понадобитсячто-то вроде этого

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

Однако, и это большой, однако.Есть еще что-то, чтобы пойти не так, и я бы серьезно предложил получить хороший WebSocket учебник и несколько пуленепробиваемых (типичных) конструкций

...