Создал ASP.NET Core чат на WebSocket'ах. При пересылке англоязычных символов - всё работает нормально, проблема начинается с пересылкой русскоязычных символов. На клиенте часть сообщения может обрезаться, например сообщение "вввввввввв" превращает "ввввв".
Иногда клиент разрывает подключение с выводом следующей ошибки в консоль:
WebSocket connection to 'ws://localhost/ws' failed: Could not decode a text frame as UTF-8.
Вот пример кода принимающего сообщения с клиента:
var buffer = new byte[1024 * 4];
while (socket.State == WebSocketState.Open)
{
var result = await socket.ReceiveAsync(buffer: new ArraySegment<byte>(buffer),
cancellationToken: CancellationToken.None);
var socketId = WebSocketConnectionManager.GetId(socket);
var message = $"[{DateTime.Now.ToString("HH:mm:ss")}] {socketId}: {Encoding.UTF8.GetString(buffer, 0, result.Count)}";
await SendMessageToAllAsync(message);
}
Отправка сообщений клиентам:
public async Task SendMessageAsync(WebSocket socket, string message)
{
if (socket.State != WebSocketState.Open)
return;
var msg = Encoding.UTF8.GetBytes(message);
//System.Text.
await socket.SendAsync(buffer: new ArraySegment<byte>(array: msg,
offset: 0,
count: message.Length),
messageType: WebSocketMessageType.Text,
endOfMessage: true,
cancellationToken: CancellationToken.None);
}
Находил ответы примерно по этой же теме на англоязычном stackoverflow, но там предлагалось вырезать неугодные байты из сообщений. Этот вариант мне не подойдёт.
Собственно вопрос: как преобразовать сообщение пришедшее в кодировке UTF-8 в сообщение с кодировкой UTF-8 или другой, так чтобы клиент видел понятный текст, а не иероглифы?
У вас проблема вот тут: buffer: new ArraySegment<byte>(array: msg, offset: 0, count: message.Length)
. Вы передаете столько байт, скольку у вас символов в сообщении, а не байт в буфере.
Надо брать длину у массива, а не у строки.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Если значения параметров нулевые - запускается окно настроек, где должен их ввести (сохранения настроек проихводится в SettingsViewModel)Проблема:...
Добрый день, возникла такая проблема: Я использую dll в проекте C#Но когда я пытаюсь запустить exe, он не запускается ( участок кода, который использует...
Подскажите хорошую библиотеку для создания музыкального плеера и как установить эту библиотеку