這裏是我的發送數據的方法:如何使用StreamWriter發送byte []?
// 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); }
}
- CLI是的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 ......」
我已經更換Base64編碼的使用Encoding.Default.GetString/GetBytes會嘗試,但後來我得到這個: 「Binary stream'0'不包含有效的BinaryHeader,可能的原因是序列化和反序列化之間的流或對象版本無效。」 如果我打印出此(默認編碼)字符串的長度,它是183.但是,如果我打印出實際的字符串,則不會打印任何內容。
我還可以通過StreamWriter作爲字符串發送一個字節[]嗎?
使用'streamWriter.BaseStream.Write'-方法 –
您是否嘗試過在兩端使用特定編碼?如UTF8或ASCII? –
另外你爲什麼要從你的getter中刪除流中的字符? –