這是推動我瘋了,現在,我目前正在寫一些客戶端/服務器軟件,我可以把客戶端之間的陣列沒有問題,但問題就出在這個代碼在這裏:序列化類丟失的數據
MemoryStream fs = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
lock (fs)
lock (sharedVars.clients[i])
formatter.Serialize(fs, sharedVars.clients[i]);
sender.SendData(setFirstByte(Game_Project_no._14wI542Z.Shared.Constants.InitialByte.REQUEST_RTN, fs.ToArray()));
我運行代碼和斷點,我可以看到內存流中包含的數據來自序列化,但它永遠不會將它傳送到另一臺計算機(實際上這通過本地主機來避免實際的網絡硬件錯誤)。
這是使用TCP和真正的瘋狂的部分是,如果我手動寫入一個新的字節數組到存儲流數據到另一側沒有問題,本質上它只是不喜歡序列化的數據。現在我真的很困惑,所以我向社區提出問題,有什麼想法?
更多參考這就是被調用時完全空數組(巴在開始request_rtn字節)到達另一端:
Shared.SharedValues.Client clientTemp;
readBuffer = removeFirstByte(readBuffer);
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream ms = new MemoryStream(readBuffer);
ms.Position = 0;
lock (serverValues)
clientTemp = (Shared.SharedValues.Client)formatter.Deserialize(ms);
serverValues.clients[clientTemp.ID] = clientTemp;
再換在服務器端,我改變的代碼測試它,它在各方面的工作:
MemoryStream fs = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
byte[] byteArray = new byte[10000];
for (i = 0; i < 10000; i++)
{
byteArray[i] = (byte)i;
}
lock (fs)
lock (sharedVars.clients[i])
//formatter.Serialize(fs, sharedVars.clients[i]);
fs.Write(byteArray, 0, 10000);
sender.SendData(setFirstByte(Game_Project_no._14wI542Z.Shared.Constants.InitialByte.REQUEST_RTN, fs.ToArray()));
你檢查了fs.toArray()的內容嗎? – 2013-05-06 21:02:23
在這兩種情況下,它們都包含我所期望的。 – 2013-05-06 21:05:28
客戶端和服務器都使用'Shared.SharedValues.Client'的相同類定義嗎? – rsbarro 2013-05-06 21:05:59