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;
}