如何在C语言socket编程中向客户端发送HTTP Content-Length头
代码问题修复方案
核心错误原因
你现有代码直接将int类型的val的二进制内存数据写入socket,而HTTP协议要求Content-Length字段的值为十进制数字组成的可读字符串,telnet作为文本交互工具收到二进制数据后无法正常展示。
修复要点
- 将整数类型的内容长度转换为十进制字符串后再写入socket
- 建议将HTTP头的换行符替换为协议标准的
\r\n,避免部分客户端解析异常
修复后代码示例
char *body = "hickory dickory dock"; int val = strlen(body); // 用于存储转换为字符串的Content-Length值,最大支持10位数字(足够覆盖常规场景) char len_str[12] = {0}; // 整数转字符串 snprintf(len_str, sizeof(len_str), "%d", val); reqType = "GET"; printf("%s\n", buffer); if(checkRequest(reqType, buffer)){ char *response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: "; write(new_socket , response , strlen(response)); // 写入字符串格式的长度值 write(new_socket, len_str, strlen(len_str)); char *m = "\r\n\r\n"; write(new_socket, m, strlen(m)); write(new_socket, body, strlen(body)); }
修改后再用telnet连接服务端,就能正常显示动态计算的Content-Length值。
内容的提问来源于stack exchange,提问作者Karan Ahuja
相关产品推荐
相关产品推荐

