我有一个生成 HTTP POST 请求的客户端和一个读取客户端发送的数据的服务器(套接字服务器)。当我在服务器端执行读取操作时,服务器只读取 header ,如下所示,它不读取客户端发送的有效负载。客户端发送大约 5KB 的有效负载,但服务器套接字上的读取操作读取 70 字节的数据( header ),尽管内容长度为 4731,如下所示。我正在使用 read/recv 系统调用来执行读取操作,有人能告诉我为什么 read/recv 系统调用无法读取有效负载吗? (服务端使用C语言实现)
由服务器读取(没有读取负载)**
POST/HTTP/1.1
内容类型:测试/html
主机:192.168.1.102:800
内容长度:4731
期望:100-继续
连接:保持事件状态
拍拍
最佳答案
您在这里缺少的是 TCP 套接字是一个流。当您从中读取时,您会收到最多您要求的字节数,这意味着内核的网络堆栈会复制您缓冲区的大小或目前可用的所有字节,以较小者为准。
底线是您需要循环读取 TCP 套接字。来自客户端的一次发送可能最终被服务器多次读取,反之亦然。
关于c - 服务器无法读取给定 HTTP POST 的负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7026821/