C#中對TCP套接字通信的新用法,有一個問題,我通過網絡流從客戶端應用程序發送一些數據,然後從我的服務器應用程序讀取它。數據第一次通過,但下一次我嘗試發送數據時,舊數據仍然在網絡流中,只是被覆蓋到新數據的長度。這在嘗試解析流中的數據時會導致問題。我試着添加一個空終止,但它似乎沒有任何影響。C#網絡流在讀取之後仍然包含舊數據
如何在發送更多數據之前清空網絡流?
我們發送一個字符串像這樣:
1|0|bob|cornell|9/14/2012 12:49:34 AM
然後另外一個是這樣的:
1|0|jim|horne|9/14/2012 12:49:34 AM
但第二串經過爲:
1|0|jim|horne|9/14/2012 12:49:34 AMAM
...其次是一堆\0
。
最後一個塊是DateTime,由於額外的AM,它無法將字符串轉換爲DateTime。即使在將\ 0附加到我們通過流發送的字符串末尾時,它也不起作用。例如:
1|0|jim|horne|9/14/2012 12:49:34 AM\0M
它似乎把空終止只是另一個角色,而不是一個信號,停止閱讀的字符串。
似乎「Flush」在NetworkStream類型上不做任何事情。這裏必須是一個愚蠢的問題,但任何幫助表示讚賞。
客戶做到這一點:
private static void writeToServer(MessagePacket message, NetworkStream clientStream)
{
clientStream.Write(message.ToBytes(), 0, message.ToBytes().Length);
}
服務器執行此操作:
byte[] rawMessage = new byte[4096];
while (true)
{
try
{
clientStream.Read(rawMessage, 0, 4096);
clientStream.Flush();
}
catch
{
break;
}
newPacket = new MessagePacket(rawMessage);
}
我認爲你正在尋找一些刷新方法...你可以顯示相關的代碼? – DarkSquirrel42
更新了一些額外的信息描述。 – ThingWings