读取文本文件片段并写入boost时出错.asio插座
eof error reading pieces of text file and writing to boost.asio socket
我正在尝试一次读取1kB的文件,并使用boost.asio将每个数据块写入套接字。问题是,当我需要从文本文件中读取最后一块数据并将其放入缓冲区时,它似乎不起作用。
我需要一种方法来打印缓冲区的最后一部分,而不打印整个缓冲区(因为它包含前一次循环迭代的剩余内容)
int portNumber = 2002;
boost::asio::io_service io_service;
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), portNumber));
tcp::socket socket(io_service);
acceptor.accept(socket);
boost::system::error_code ignored_error;
int length;
char* buffer = new char[1025];//1024 bytes for data, 1 byte for seqNum
//get file stream and open local file.
ifstream stream;
stream.open("SampleFile.txt", ios::binary);
stream.seekg(0, ios::end);
length = stream.tellg();
stream.seekg(0, ios::beg);
while (!stream.eof())
{
//char sequenceNumber = '0';
stream.read(buffer, 1024);
buffer[1024] = sequenceNumber;//set last pos to seq num
boost::asio::write(socket, boost::asio::buffer(buffer),
boost::asio::transfer_all(), ignored_error);
.
. //do other things
.
}
这将最终将所有内容写入套接字(假设客户端正在合作),除了文件末尾的一部分将被写入两次。
1)您没有正确计算最终缓冲区的大小。
2)您没有正确地测试流的错误或eof条件。
试试这个:
while (stream)
{
stream.read(buffer, 1024);
buffer[1024] = sequenceNumber++;//set last pos to seq num
boost::asio::write(socket, boost::asio::buffer(buffer, stream.gcount()),
boost::asio::transfer_all(), ignored_error);
...
}
相关文章:
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- 执行时使用 boost::asio::d eadline_timer 时出错
- 使用boost库(cpp_int)时获取常量时出错
- 断开连接后重新连接boost beast(asio)websocket和http连接时出错
- 将 boost 与 Visual Studio 和 vcpkg 链接时出错
- Boost FFT示例-编译时出错,这段代码在做什么
- Python 3.6 的 boost 和 dlib 安装期间出错
- 在 boost::heap::p riority_queue 中推送结构对象时出错
- 编译在 Python 代码内部调用的 C++ 代码时出错,使用 Boost Python
- 使用 boost::bind 进行订阅回调时出错
- 将 std::bind 应用于带有参数 <boost::asio::ip::tcp::socket> 时出错?
- ctime 包含 boost::文件系统时出错
- 构建 boost 1.61 iostream 时出错 - 使用 -fPIC 重新编译
- 将 CLANG 构建的可执行文件与 G++-v6 构建的 Boost 库链接时出错
- 导入 Boost Python 模块 (function_impl_base9max_arityEv) 时出错
- 使用由 Mingw 5.3 编译的 boost ASIO 库使用 QT 时出错
- Boost Python:在函数中通过引用传递变量时出错
- 编译用于创建boost.log格式的代码时出错
- 在 Cygwin 64 上包含 boost.asio 时出错
- 浮点数学出错使用来自 boost::multiprecision 的cpp_bin_float