You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:54:03