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

如何在C脚本中查看send()发送的LAN数据并正确写入文件?

解决send发送内容写入文件乱码的问题

先明确几个核心问题,再给你对应的解决方法:

可能的乱码原因及对应方案

  • 文件打开模式错误
    如果buffer里是二进制数据(比如网络传输的协议报文、非文本数据),用文本模式("w")打开文件会导致系统自动转换换行符(比如Windows下把\n转为\r\n),破坏原始数据。必须用二进制模式打开:

    FILE *fptr = fopen("sent_data.bin", "wb");
    if (!fptr) {
        perror("Failed to open file");
        // 处理错误逻辑
    }
    
  • 错误使用预期发送长度而非实际发送长度
    send函数的返回值才是实际成功发送的字节数,网络环境下可能无法一次性发送n*16字节。如果你直接用n*16作为fwrite的长度,会写入buffer中未被发送的无效数据,导致乱码:

    ssize_t actual_sent = send(sock_client, buffer, n * 16, MSG_NOSIGNAL);
    if (actual_sent == -1) {
        perror("Send failed");
        fclose(fptr);
        // 处理错误逻辑
    }
    // 只写入实际发送的字节数
    size_t written = fwrite(buffer, 1, actual_sent, fptr);
    if (written != actual_sent) {
        perror("Failed to write all data to file");
    }
    
  • buffer数据被篡改或释放
    确保执行fwrite时,buffer仍然是有效的(比如不是栈上的临时变量已被销毁,或者被其他代码覆盖)。如果send和fwrite之间有其他操作修改了buffer,也会导致写入错误数据。

验证数据正确性

如果写入的是二进制数据,用普通文本编辑器打开必然会显示乱码——这是正常现象。你需要用十六进制编辑器(比如Linux的xxd命令、Windows的HxD工具)查看文件内容,对比buffer的原始十六进制值来验证是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:11:03