我有一个网络请求,它创建与服务器的持久(保持活动)连接,例如:
webRequest.ContentType = "application/x-www-form-urlencoded";
// Set the ContentLength property of the WebRequest.
webRequest.ContentLength = byteArray.Length;
webRequest.Timeout = Timeout.Infinite;
webRequest.KeepAlive = true;
webRequest.ReadWriteTimeout = Timeout.Infinite;
//[System.Threading.Timeout]::Infinite
webRequest.UserAgent = "www.socialblazeapp.com";
Stream dataStream = webRequest.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close();
// Get the response.
webResponse = (HttpWebResponse)webRequest.GetResponse();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
responseStream = new StreamReader(webResponse.GetResponseStream(), encode);
while(!responseStream.EndOfStream){ //do something}
我想知道为什么responseStream.EndOfStream 会在一段时间后变为true。我会假设因为这是一个持久连接,所以流永远不会关闭?
有什么想法为什么会发生这种情况吗?
我认为您混淆了保持 TCP 连接打开和保持响应流打开。 TCP 连接是底层传输介质,而请求和响应是通过该连接进行通信的单独实体。
通过持久连接,您[理论上]可以通过同一连接发出多个请求/响应对。如果没有持久连接,您实际上将打开连接,发出请求,接收响应,然后关闭连接,然后对后续请求/响应对重复该过程。
然而,响应本身的大小是有限的,一旦您收到完整的响应,流应该关闭,因为没有什么可以告诉您的了。一旦您发出另一个请求,就会出现另一个响应;我不清楚.Net 是否会重用底层的持久连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)