我有一個while while循環,它從NetworkStream
對象 中讀取一個緩衝區,while條件是networkStream.CanRead
,只要它能讀取,它應該繼續從緩衝區讀取數據。唯一的問題是,當我從緩衝區讀取並轉換爲字符串時,其中沒有任何內容。即它是空的。NetworkStream.CanRead返回true,但緩衝區沒有返回值
爲什麼會發生呢?
這是一個ASP.NET(VS2005)應用
@dtb代碼信息:
我傳遞了一個NetworkStream
對象networkStream
// between 2 functions in a loop
{
SendMessage(networkStream, message);
ReadMessage(networkStream);
}
有趣的是,如果它重新連接和再次連接,發送/讀取工作正常。實際上它可能是Send的問題(我在這裏沒有得到任何例外),或者重用了NetworkStream
對象。這在測試TCP服務器上本地正常工作,但是在生產(Windows Server 2003)時,我遇到了上述問題(即無法從流中讀取任何內容 - 直到我實際將其退出(退出循環)之後10秒)
ReadMessage(networkStream)
{
if (networkStream != null && networkStream.CanRead)
{
byte[] myReadBuffer = new byte[1024];
StringBuilder myCompleteMessage = new StringBuilder();
do
{
int numberOfBytesRead = networkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
string messageRead = Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead);
myCompleteMessage.Append(messageRead);
} while (networkStream.CanRead);
}
}
請注意:它確實在第一次讀取消息後,在同一網絡流上發送另一個數據請求,這發生在第二次去 – soldieraman 2009-11-17 03:14:18
@soldieraman:如果darkassassin93的回答沒有回答您的問題,請向我們展示您的代碼。我有這樣的感覺,你正在假設有關包邊界和/或'Read'方法返回的字節數可能是錯誤的。 – dtb 2009-11-17 03:19:55
@dtb把一些代碼信息 – soldieraman 2009-11-17 05:14:59