c - 服务器无法读取给定 HTTP POST 的负载

标签 c network-programming

我有一个生成 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/

相关文章:

c - MSVC 生成的符号表中 __real、__imp、__xmm 符号的含义

c - 如何在C中制作自己的IO功能?

c - 在 C 中通过套接字发送大文件

python - 用于性能测试的多个同时 tcp 客户端连接

java - Coldfusion 获取给定 IP4 地址范围内的所有 IP 地址

android - InetAddress.getLocalHost() 总是崩溃

c - 我应该使用C中的十六进制数字格式来执行算术吗?

c++ - VS2010 缺少 ws2_32.lib。怎么办?

java - 使用 netsh 从 Java 访问 Wi-Fi 网络接口(interface)详细信息

c - 为什么c中需要头文件