Вот мой метод для передачи данных:Как я могу отправить byte [] с StreamWriter?
// this method serializes an object and is returned as a string (Base64 encoded)
public void Send(Packet packetData)
{
try
{
StreamWriter w = new StreamWriter(cli.GetStream());
string s = SerializeObject(packetData);
w.WriteLine(s + "\n");
w.Flush();
}
catch (ObjectDisposedException) { ShutdownClient(-2); }
}
- кли является объектом TcpClient
- Пакетная сериализации объекта
Вот мой получить метод:
private string GetMessage(StreamReader r)
{
try
{
string s = r.ReadLine();
s = s.Replace(" ", "");
// this string is returned and then deserialized
return s;
}
catch (Exception e) { System.Windows.Forms.MessageBox.Show(e.Message); return null; }
}
Когда Я использую это, в 50% случаев, когда он работает. Если это не работает, из-за этого: «Входной поток не является допустимым двоичным форматом. Начальное содержимое (в байтах): 6D-2E-44-72-61-77-69-6E- 67-2E-43-6F-6C-6F-72-0F-00 ...»
Я попытался с помощью Encoding.Default.GetString/GetBytes в замене Base64, но затем я получаю это: «Двоичный поток« 0 »не содержит допустимого BinaryHeader. Возможными причинами являются недопустимый поток или изменение версии объекта между сериализацией и десериализацией». Если я распечатаю длину этой (по умолчанию кодированной) строки, она равна 183. Но если я распечатаю фактическую строку, ничего не будет напечатано.
Как еще я могу отправить байт [] в виде строки поверх StreamWriter?
Использование метода streamWriter.BaseStream.Write –
Вы пытались использовать определенную кодировку с обоих концов? таких как UTF8 или ASCII? –
Также почему вы удаляете символы из потока на своем получателе? –