Encoding строк при передачи через сокет - C#
Формулировка задачи:
Доброго времени суток.
Возникла проблема с декодированием строк при передачи через сокеты по протоколу Tcp.
На клиенте получаю некую строку из textBox, кодирую ее в массив байт и передаю на сервер:
На сервере принимаю строку и передаю в метод обработки:
HandlerMessage должен обработать строку и выполнить некоторые действия:
В моем случае buffer[0] = 0x1
Запрашиваем доп. данные, далее все это складываем в переменные и выводим:
MessageBox.Show(string.Format("Name: {0}, message: {1}", new String(name.ToCharArray()), new string(message.ToCharArray())));
Но вывод происходить не правильный, потому что строки имею формат: "asdgfasf\0\0\0\0..." и так до конца размера буфера.
Подскажите как избавиться от нулевых символов, не написав велосипеда который будет их убирать?
Должны же быть какие то стандартные средства...
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"); } }
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; }
Решение задачи: «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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д