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

C语言实现FTP协议STOR命令接收文件出现冗余乱码如何解决

核心问题

你代码的核心错误是fwrite写入长度参数使用错误:read返回的bytes_read是本次实际从socket读取到的有效字节数,而你每次都固定写入sizeof(buffer)(即4096字节),最后一次读取大概率读不满4096字节,buffer中未被新数据覆盖的残留垃圾数据就会被写入文件,就是你看到的末尾乱码。

修复后的代码示例

int rec_file(char *filename, int sockfd){
    ssize_t bytes_read;
    char buffer[4096];
    // 新增fopen失败判断,避免空指针崩溃
    FILE *f = fopen(filename, "wb");
    if (f == NULL) {
        return -1;
    }
    
    while ((bytes_read = read(sockfd, buffer, sizeof(buffer))) > 0){
        // 改成写入实际读到的bytes_read字节,而非固定4096字节
        fwrite(buffer, 1, bytes_read, f);
    }
    // 新增read错误判断,处理网络异常场景
    if (bytes_read < 0) {
        fclose(f);
        return -2;
    }
    fclose(f);
    return 0;
}

额外优化建议

  • 存储read返回值的变量建议使用ssize_t类型而非int,符合POSIX接口定义,避免大文件传输时的溢出风险
  • 实际FTP协议实现中,STOR命令需要先判断客户端协商的传输模式(二进制/ASCII),如果是ASCII模式还需要对换行符做平台兼容转换,避免文本文件跨平台打开格式错乱

内容的提问来源于stack exchange,提问作者felixoben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:15:03