2013-08-30 42 views
0

我有客戶端 - 服務器應用程序。我需要異步查看客戶端發送到服務器的方式並作出相應的反應。我只能訪問網絡流,因此如果我使用NetworkStream.Read(),我會丟失流中的數據。我試圖寫數據迴流,但我仍然無法訪問服務器端的流。從網絡流中讀取而不丟失數據

有什麼方法可以查看NetworkStream嗎?如果我沒有弄錯,通過使用套接字對象並調用接收方法是有辦法的。問題是NetworkStream中的套接字屬性受到保護,因此我無法使用它。我能以某種方式訪問​​這個特定的套接字嗎

謝謝你的幫助。

+0

你的意思是你想偷看套接字的數據而不從流中移除它?有一個'Read(buff,0,length,MSG_PEEK);'這將返回數據而不從流中移除它。 –

+0

情況看起來如下:客戶端發送請求到服務器,如果請求包含特定的消息,我需要偷看流。服務器應該收到請求後,我偷看流。問題是用戶發送請求,然後開始處理。在此期間可能會要求服務器停止處理,這就是爲什麼我需要以異步方式偵聽同一個流。我只能訪問流,而不是底層套接字。 – Divh

+0

humm,我明白了。有些東西會調用與正常數據不同的緊急數據。恐怕您需要訪問套接字才能獲得緊急數據。當您看到緊急數據包時,表明您希望服務器停止處理。爲什麼你不能訪問底層套接字? –

回答

0

不,基本上。它不公開任何peek API。你將不得不維護你自己的緩衝區。注意:您也不能寫入讀取流 - 如果您寫入NetworkStream,則將該數據發送到另一臺機器。