Encoding строк при передачи через сокет - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Возникла проблема с декодированием строк при передачи через сокеты по протоколу Tcp. На клиенте получаю некую строку из textBox, кодирую ее в массив байт и передаю на сервер:
byte[] buffer = new byte[1024];
buffer[0] = 0x1;
 
Encoding.ASCII.GetBytes( textBox_Copy.Text, 0, textBox_Copy.Text.Length, buffer, 1 );
client.Send(buffer);
На сервере принимаю строку и передаю в метод обработки:
            private void clientHandler( Socket client )
            {
                while ( this.IsRunning )
                {
                    byte[] buffer = new byte[1024];
                    try
                    {
                        if ( client.Receive(buffer) == 0 ) continue;
                    }
                    catch (Exception e)
                    {
                        Clients.Remove(client);
                        return;
                    }
 
                    if (!handlerMessage(buffer, client)) throw new Exception("Invalid packet ID");
                }
            }
HandlerMessage должен обработать строку и выполнить некоторые действия:
            private bool handlerMessage(byte[] buffer, Socket client)
            {
                if (buffer[0] == 0x1)
                {
                    client.Send(new[] {(byte) 0x7});
 
                    byte[] lBuffer = new byte[1024];
                    client.Receive(lBuffer);
 
                    if (lBuffer[0] == 0x2)
                    {
                        string message = Encoding.ASCII.GetString(buffer, 1, buffer.Length - 1).Trim();
                        string name = Encoding.ASCII.GetString(lBuffer, 1, lBuffer.Length - 1).Trim();
 
                        MessageBox.Show(string.Format("Name: {0}, message: {1}", new String(name.ToCharArray()), new string(message.ToCharArray())));
                    }
 
                    return true;
                }
 
                if (buffer[0] == 0x2)
                {
                    return true;
                }
 
                if (buffer[0] == 0x3)
                {
                    return true;
                }
 
                return false;
            }
В моем случае buffer[0] = 0x1 Запрашиваем доп. данные, далее все это складываем в переменные и выводим: MessageBox.Show(string.Format("Name: {0}, message: {1}", new String(name.ToCharArray()), new string(message.ToCharArray()))); Но вывод происходить не правильный, потому что строки имею формат: "asdgfasf\0\0\0\0..." и так до конца размера буфера. Подскажите как избавиться от нулевых символов, не написав велосипеда который будет их убирать? Должны же быть какие то стандартные средства...

Решение задачи: «Encoding строк при передачи через сокет»

textual
Листинг программы
        public static int SendReceiveTest(Socket server)
        {
            byte[] msg = Encoding.UTF8.GetBytes("This is a test");
            byte[] bytes = new byte[server.ReceiveBufferSize];
            try
            {
                int i = server.Send(msg);
                Console.WriteLine("Sent {0} bytes.", i);
                
                i = server.Receive(bytes);
                Console.WriteLine("Receive {0} bytes.", i);
                string message = Encoding.UTF8.GetString(bytes, 0, i);
                Console.WriteLine(message);
            }
            catch (SocketException e)
            {
                Console.WriteLine("{0} Error code: {1}.", e.Message, e.ErrorCode);
                return (e.ErrorCode);
            }
            return 0;
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы