3
我無法通過TCP/IP套接字連接發送序列化數據。C#套接字發送序列化數據
我的發送功能如下:
public void SendData(NetworkConnection connection, ReplicableObject ro) {
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, ro);
ms.WriteTo(connection.TcpStream);
connection.TcpStream.Flush();
ms.Close();
}
我所知,目前TcpStream.Flush()不會做任何事情。無論如何,這不是我的問題。
在接收(客戶端),讀者看起來是這樣的:
byte[] readBuffer = new byte[8192];
worldMapStream = worldMapConnection.GetStream();
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
IsConnectedToWorldMap = true;
while (true) {
try {
do {
int bytes = worldMapStream.Read(readBuffer, 0, readBuffer.Length);
ms.Write(readBuffer, 0, bytes);
}
while (worldMapStream.DataAvailable);
try {
ReplicableObject ro = (ReplicableObject) bf.Deserialize(ms);
ro = ro;
}
catch (Exception e) {
e = e;
}
}
奇怪RO = RO和E = E線就在那裏,所以我可以添加一個斷點。
我的問題是這樣的:讀取總是失敗。我收到一個異常,並且該消息解釋了在解析完成之前流的末端已達到。現在,我明白數據可能不會全部到達一個塊,但是我沒有清除內存流捕捉異常,所以下一個塊應該只是將剩餘的數據添加到它的末尾,對吧?但顯然這不起作用。
那麼,我做錯了什麼?提前致謝。 :)
P.S.我知道WCF是更好的選擇;但不幸的是我不能在這個項目中使用它。
對不起,我必須誤解......當然,那個循環永遠不會退出嗎?由於每次從字節讀取tcpstream都會大於0;導致它回到循環的開始並再次讀取? – Xenoprimate
@Motig關閉時它會返回<= 0。此外,還有第二個錯誤 - 請參閱編輯 –
@Migig - 另外,我*不*認爲WCF會更好;但我可以建議一個比BinaryFormatter更好的序列化程序,如果你喜歡:) –