.net - 知道何时停止从 HTTP 级别的 .NET 套接字读取

标签 .net sockets

.NET Socket 和 NetworkStream 都提供 Read 方法,当没有可用数据时,该方法会阻塞。问题在于,如果客户端不知道消息的大小,则无法可靠地了解服务器何时完成发送消息。

我的问题是 - 更高级别的库(如 HTTP 级别的 WebRequest)使用什么原则来停止从套接字读取并向客户端呈现完整消息,而不诉诸任何类型的读取超时?似乎 HTTP 协议(protocol)不提供任何“EOF” token ......

最佳答案

HTTP 1.1 通过使用两种机制之一来管理这一点。 content-length在 header 中发送,或 chunked transfer encoding用来。分 block 传输编码是 HTTP 1.1 相对于 HTTP 1.0 的一大优势,在没有发送内容长度的情况下,无法可靠地检测到传输结束,从而导致传输问题与有效负载的实际结束之间存在歧义.在某些情况下(例如 HTTP 上的音频流),没有可能指示传输结束的内容长度或其他编码,但在这种情况下,它对客户端来说并不重要。

关于.net - 知道何时停止从 HTTP 级别的 .NET 套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5109214/

相关文章:

c# - AutomationElement 如何用于 UI 自动化

C TCP/IP 服务器绑定(bind)错误 -- 非套接字上的套接字操作

java - 在 Java 和 C++ 之间通过 TCP 发送数据

java - 本地PC无法读取同一网络中其他PC的套接字

c - 当我用 C 中的套接字发送 char * 时,我收到 (null)

C# 如何解决 HtppWebResponse return Could not establish trust relationship for the [SSL/TLS] secure channel?

.net - 格式化文本的复制粘贴如何工作?

python 错误: 'module' object has no attribute 'AF_UNIX'

.net - .NET 中是否有一组适用于 FFMpeg、libavutil、libavformat 和 libavcodec 的有效 P/Invoke 声明?

c# - DAAB 中的动态连接字符串