3
我使用HttpWebResponse.BeginGetResponse()方法向我的服務器發出請求。請求將AllowReadStreamBuffering設置爲false以便數據不會被緩衝。在「請求完成」通知我這樣做(包括任何錯誤處理代碼)如下:BinaryReader.Read在連接丟失時不拋出IOException
HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(result);
BinaryReader streamReader = new BinaryReader(response.GetResponseStream());
try
{
while ((readSize = streamReader.Read(buffer, 0, buffer.Length)) > 0)
{
...
}
}
catch (Exception)
{ // NEVER GET HERE!!
...
}
我的問題是,(在while循環)讀取從數據流中我不能檢測連接錯誤。行爲非常奇怪:它完成讀取操作系統在緩存中的所有數據,然後返回「readSize = 0」,如「流結束」一樣。 我期待streamReader.Read()拋出一個IOException異常但它不會! 我試圖找到一個流失敗標誌的某處,但似乎沒有(流/ BinaryReader/HttpWebResponse)。請幫忙!
我用三個場景測試,這一切都得相同的行爲:
- 使用手機到PC的USB連接
- 手機連接到互聯網使用PC的USB連接
- 後幾streamReader.Read()成功呼叫我禁用PC網卡
- 使用WIFI連接
- 手機採用WIFI連接
- 幾個streamReader.Read(後)成功呼叫連接到互聯網的我WIFI路由器
- 斷電使用WIFI連接
- 手機採用WIFI連接 連接到互聯網
- 經過幾次streamReader.Read()成功的呼叫,我刪除廣域網電纜(所以它沒有互聯網接入)。
謝謝! 米哈伊
多大的緩衝區中讀取的字節數? –
在這一刻它是16K,但這沒有關係。 – Mihai
嘗試在while循環下創建自己的異常,從而更好地控制情況......這可以幫助您更深入地瞭解正在發生的事情。 – Keeano