【发布时间】:2011-11-17 15:53:44
【问题描述】:
我使用 System.IO.Stream.Read 与服务器端建立了 HTTP 连接,以读取 HTTP 请求正文消息。 问题是,在几分钟内,服务器会卡在 Read 语句上,并且在达到套接字超时或客户端关闭连接之前不会继续。
int bytesRead = 0;
while (bytesRead < contentLength)
{
int got = stream.Stream.Read(buffer.Buffer, bytesRead, contentLength - bytesRead);
bytesRead += got;
}
如果流没有 contentLength 变量指定的数据量,可能会发生这种情况。 情况并非如此,因为当使用 WireShark 跟踪 tcp 流时,我看到整个消息正文(由 contentLength 指定)已到达服务器计算机。
仅在第一次“使用”while 循环时发生,即仅在流没有“contentLength”字节数的情况下一次尝试和 while 读取必须重新进入循环。
为什么会卡住不继续读取数据?
【问题讨论】:
-
可能是服务器会话时间限制。
-
您在 HttpWebRequest 类上使用 System.io.Stream 的任何原因?好像有点不方便?
-
@kmcc049 关键字是“body”——通过
Stream读/写body 是很常见的;最常见的是HttpRequest.InputStream,或者如果您正在创建一个请求,HttpWebRequest.GetRequestStream()。 -
@Marc ah ok 没注意正文部分,以为他在手动做 http 的东西,像
using (var remoteReader = new StreamReader(remoteResponse.GetResponseStream())) result = remoteReader.ReadToEnd();这样的东西阅读正文似乎更方便....
标签: c# .net sockets tcp stream