我使用 HttpWebResponse.BeginGetResponse() 方法向我的服务器发出请求。该请求将 AllowReadStreamBuffering 设置为false,以便不会缓冲数据。在“请求完成”通知中,我执行以下操作(不包含错误处理代码):
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 异常,但它没有!我试图在某处找到流失败标志,但似乎没有(Stream/BinaryReader/HttpWebResponse)。请帮忙!
我使用三个场景对此进行了测试,并且都具有相同的行为:
- 使用手机到 PC 的 USB 连接
- 使用 PC USB 连接连接到 Internet 的电话
- 几次 streamReader.Read() 成功调用后,我禁用了 PC 网卡
- 使用 WIFI 连接
- 手机使用 WIFI 连接到互联网
- 几次 streamReader.Read() 成功调用后,我关闭了 WIFI 路由器
- 使用 WIFI 连接
- 手机使用 WIFI 连接到互联网
- 经过几次 streamReader.Read() 成功调用后,我移除了 WAN 电缆(因此它无法访问 Internet)。
谢谢!米海