Проблема с декодированием ответа от WebSocket. C#

325
13 марта 2017, 07:59

Есть сервер на С# и клиент на скрипте. Данные от сервера отправляются хорошо, а вот с приемом разобраться не могу

Со стороны серера: SCRascodirovat(socket.Receive(bytes))

    static string SCRascodirovat(int get)
    {
        String data = null;
        data += Encoding.UTF8.GetString(bytes, 0, get);
        return data;
    }

Со стороны клиента:

socket.send("123");

Вместо данных от клиента приходит всякая лобуда, хотя с отправкой сообщения клиенту проблем нет и ответное рукопожатие проходит стабильно. Я понимаю что проблема в декодировании сообщения, но не понимаю как правильно.

Answer 1

Уверены, что UTF-8 кодировка ? Попробуйте другие варианты, доступные классу Encoding. Также проблема может быть в неполном получении байтов сообщения либо коротком (либо избыточном, с лишними байтами) буфере байт-массива, в который ведется прием.

Если используется асинхронный прием-передача, то вот кусок кода на асинхронный прием. В strcontent хранится полученная строка.

 public void AcceptCallback(IAsyncResult AR)
        {

            try
            {
            _clientSocket = _serverSocket.EndAccept(AR);
            buffer = new byte[_clientSocket.ReceiveBufferSize];
            _clientSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceivedCallback), null);
            _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
            }
            catch (Exception e)
            {
                Console.WriteLine("Произошла ошибка: {0}", e.ToString());
            }
        }
        private void ReceivedCallback(IAsyncResult ar)
        {
            try
            {
            int received = _clientSocket.EndReceive(ar);
                if (received ==0)
                {
                    return;
                }
            Array.Resize(ref buffer, received);
            strcontent = Encoding.ASCII.GetString(buffer);
            Array.Resize(ref buffer, _clientSocket.ReceiveBufferSize);
            refreshMethod(strcontent);
            _clientSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceivedCallback), null);
            }
            catch (Exception e)
            {
                Console.WriteLine("Произошла ошибка: {0}", e.ToString());
            }
        }
READ ALSO
Xamarin videoView черный экран но звук идет

Xamarin videoView черный экран но звук идет

Звук идет а плеер черный

341
gulp + browser-sync обновляет не все файлы php

gulp + browser-sync обновляет не все файлы php

Все крутится на openserver

567
Добавить поле поиска в GridView

Добавить поле поиска в GridView

В БД есть три таблицы, свзянанные внешними ключами

313
Рекурсия + cUrl

Рекурсия + cUrl

Извиняюсь за непонятный заголовок, так как не знаю как правильно назвать эту проблему

304