【问题标题】:C Sockets: Redirecting buffer to another fileC Sockets:将缓冲区重定向到另一个文件
【发布时间】:2011-04-02 05:44:53
【问题描述】:

如果之前有人以不同的措辞提出过这个问题,我深表歉意。

这是我的问题。我有一个 Linux TCP 服务器客户端关系,并且在我的代码的某个部分,服务器将向客户端写入()文件缓冲区的块(比如说 512 个字节)。我希望客户端通过以某种方式将缓冲区块向外重定向到已经制作的文件(模仿复制效果)来重建另一端的文件。我正在考虑一个中间人,他会将缓冲区转换为字符,然后使用 fprintf 等将信息推送到文件中(这是我能想到的唯一方法)。但是,这个想法在处理二进制文件时不起作用,因为 ascii 会弄乱二进制文件。

有没有办法将文件缓冲区指针重定向到另一个文件?谢谢!

【问题讨论】:

    标签: c linux sockets buffer


    【解决方案1】:

    使用recv 从套接字读取缓冲区,并使用fwrite 将其写入文件。在打开本地文件之前,一定要使用"wb"作为模式。

    编辑:这是总体思路的草图:

    socket input = open_socket(server, server_port);   
    FILE *file = fopen("localfile.bin", "wb");
    char buffer[some_size];
    
    do { 
        size_t received = recv(input, some_size);
        fwrite(buffer, received, 1, file);
    } while (received != 0);
    

    【讨论】:

    • 让我试试这个。感谢您的快速回复
    • 实际上我在解释我的问题时可能使用了错误的词(我迟到了:P)。我在服务器中打开了一个文件,并通过将 FILE * fp 分块写入客户端来流式传输内容。客户端应该获取块并将它们定向到具有相同名称的本地文件中。如果您的解决方案仍然有效,请告诉我。 (BTW .bin 或 .txt 可以提前做好预防措施)。
    • @Chris Allen: 是的——应该不是问题,只要服务器发送的数据未经修改。
    • 我对这个网站很陌生,所以我不确定在哪里提出后续问题。我在客户端有一个文件指针(比如 fp = NULL),并且我将 recv 语句设置为 recv(socket, &fp, bytes, 0) 其中字节是我的测试文件 lol.txt 的大小(30 字节)。我将 fwrite 语句设置为 fwrite(fp, bytes, 1, outfile) ,其中 outfile 是指向使用 wb 创建的目标文件的 FILE 指针。我在 fwrite 部分遇到了段错误。你能指出我哪里错了吗?
    • @Chris Allen: 如果fp=NULL,那么你没有有一个指向文件的有效点——你需要用fopen打开一个文件(并且在成功使用fwrite 之前获取一个非NULL) 指针。
    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 2014-02-18
    • 2013-01-09
    • 2013-10-19
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多