2009-06-17 97 views
3

我想空讀所以我寫後續碼插座的緩衝...如何在不阻塞的情況下調用NetworkStream.Read()?

byte[] tempBuffer = new byte[1024]; 
int readCount = 0; 
while ((readCount = tcpSocket.GetStream().Read(tempBuffer, 0, tempBuffer.Length)) != 0) 
{ 
    // do with tempBuffer 
} 

但Read()方法被阻塞,所以我說tcpSocket.ReceiveTimeout = 1;。它和以前一樣工作。

據我所知,這通常用於C++。我怎麼解決這個問題?

回答

4

您可以使用DataAvailable屬性來查看在調用Read方法之前是否有任何要讀取的內容。

2

直接使用NetworkStream.Read()功能,而不是使用GetStream()

如果沒有數據可供讀取, Read方法返回0 如 可用讀 操作讀取儘可能多的數據,直到大小參數指定的字節數 。如果 遠程主機關閉了 連接,並且所有可用數據已收到 ,則讀取方法 立即完成並返回零 字節。注意:

+0

你是什麼意思直接使用**功能**?沒有那個靜態成員函數。請讓我看看一些代碼。 – 2009-06-18 01:19:21

+0

這是沒有靜態功能。如果您已閱讀我提供的MSDN鏈接,則會看到這是NetworkStream對象上的一個方法。既然你沒有提供你的`tcpSocket`變量的實際類型,我不得不從你的其他文本中猜測。 – 2009-06-18 07:58:08

+4

我不確定你在說什麼。 OP實際上是通過`tcpSocket.GetStream()`使用NetworkStream對象。 – danyim 2011-09-20 16:11:24

1

爲什麼要清空讀緩衝區? 如果您不希望套接字的內容關閉它。 如果你不想要當前的內容,但會需要更晚的數據,你怎麼知道什麼時候開始。如果數據是非封裝流...

聽起來像你以錯誤的方式解決問題。

相關問題