gpt4 book ai didi

c# - 如果它是持久(keepalive)连接,为什么我会在 webrequest 中到达 endOfStream?

转载 作者:行者123 更新时间:2023-11-30 22:45:22 25 4
gpt4 key购买 nike

我有一个 webrequest 可以创建与服务器的持久(保持事件)连接,例如:

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 是否会重用底层持久连接。

关于c# - 如果它是持久(keepalive)连接,为什么我会在 webrequest 中到达 endOfStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3089382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com