从套接字读取并写入文件 C++

Posted

技术标签:

【中文标题】从套接字读取并写入文件 C++【英文标题】:read from socket and write into file C++ 【发布时间】:2014-04-27 17:08:54 【问题描述】:

我正在寻找一种将套接字接收的数据写入文件的有效且有效的方法。 现在我正在这样做:

if (!fStream.is_open())
    cerr << "Unable to open file stream.\n";
    exit(EXIT_FAILURE);

char* recBuffer = new char [MAX_SIZE];

bzero(recBuffer, MAX_SIZE);
ssize_t recieved;
while ((recieved=read(s, recBuffer, MAX_SIZE))>0)
    fStream.write(recBuffer,MAX_SIZE);
    bzero(recBuffer, MAX_SIZE);

这个实现的问题是......假设我正在接收文本文件,当我将接收到的数据写入文件时,文件包含接收到的数据 + 来自内存其余部分的 NULL。如果我只写收到的计数,我只会在文件中看到 NULL。

p.s Boost::Asio 不是我的答案:(。

谢谢

【问题讨论】:

你知道流是缓冲的吗?如果缓冲区没有被刷新,则实际上不会将任何内容写入文件。您可能希望在每次写入后刷新缓冲区以进行测试。如果您记得只写 recieved 字节,则不需要 bzero 调用。 【参考方案1】:

这一行

fStream.write(recBuffer,MAX_SIZE);

应该是

fStream.write(recBuffer,received);

而且两行都不需要bzero

【讨论】:

正如我所写的,我只写了收到的计数,我在文件中只看到 NULL。也许我在服务器端有错误...... 你可能在服务器端有完全相同的错误。

以上是关于从套接字读取并写入文件 C++的主要内容,如果未能解决你的问题,请参考以下文章

从文件 c++ 读取和写入的循环问题

向/从映射文件 C++ 写入和读取

从文件中读取行并将它们分成两个数字并执行计算并将它们写入文件c ++

在 C++ 中写入整数并从二进制文件中读取它们:字节数 mismaych

C++:从 txt 文件读取和写入的成员函数

如何使用 C++ 在 .txt 文件中写入、读取和重写