2011-04-16 28 views
1

我正在創建一個客戶端 - 服務器應用程序,我只是想知道一件事情。NetworkStream.Read - 它可以收集部分消息嗎?

客戶端將查詢對象序列化爲字符串,然後使用NetworkStream將其發送到服務器。

服務器使用GetStream()讀取字節,將其寫入緩衝區,將該字符串反序列化爲Query對象並獲取存儲在接收查詢中的信息。

Read()方法是否可能返回部分消息(尚未完全到達)? 或者,例如,在立即發送兩條消息的情況下,是否可以通過Read()方法的一次調用將兩條消息讀取爲一個字節的字符串?

或者,也許NetworkStream知道如何識別完整的消息,每個Read()與每條消息相關聯?

預先感謝您。

回答

1

Read()方法可能返回部分消息嗎?

是,

如果你看到MSDN Doc它說:

這種方法將數據讀入緩衝區參數,並返回字節數量成功讀取。如果沒有數據可用於讀取,則Read方法將返回0.讀取操作讀取的數據,數據量最多爲,最大數量爲size參數指定的字節數。如果遠程主機關閉連接,並且已收到所有可用數據,則Read方法立即完成並返回零字節。

因此時常檢查Read()方法的返回(INT)值,看看方法讀取的字節數量期望。


在立即發送兩個消息的情況下,是有可能讀取兩個消息作爲字節字符串,由讀取的一個呼叫()方法?

最有可能編號

相關問題