c++ - 读取时如何获取套接字流的位置
问题描述
当您使用像async_read_some这样的 boost 功能时,是否可以找到流套接字的偏移量或位置?
例如,当程序在套接字会话中读取大量 json 文本时,我在handle_read中使用下一个代码,并且我想在读取数据时准确地知道流的位置,如下所示:
socket.async_read_some(
boost::asio::buffer(data, max_length),
boost::bind(&Session::handle_read, this, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)
);
//socket.get_offset() or socket.get_position()
在文档中我找不到任何合适的解决方案。
最大缓冲区大小为 65536 字节,但套接字获取的 json 文本更大。
我无法在正确的位置正确附加缓冲区块,因为异步在某种随机播放结果中执行此操作,但我需要以正确的方式执行此操作。
解决方案
如果要获取接收到的数据的实际大小,可以Session::handle_read
在第二个参数的回调函数( )中获取其值。
要读取大流,您可以检查boost::asio::error::eof
处理程序中的错误代码
if (!err)
{
// Continue reading remaining data until EOF.
}
else if (err != boost::asio::error::eof)
{
std::cout << "Error: " << err << "\n";
}
推荐阅读
- python-3.x - 如何使用 Selenium 和 Python 单击侧栏标签内的按钮
- php - Laravel 将原始 SQL 查询编写为 Eloquent 的可能方法
- python - 如何在不提供 requirements.txt 的 python pip 项目上安装依赖项?
- java - 找不到符号 textView AndroidStudio
- r - 子组中的聚合矩阵
- r - 在原始帖子“R - 生成二进制向量的所有可能成对组合”中添加附加条件
- php - 使用 php 和 headers 在浏览器中使用 charset utf-8 显示 csv
- xml - 如何使用 ConvertTo-Xml 和 Select-Xml 加载或读取 XML 文件?
- apache-spark - 将 SequenceFile 转换为 DataFrame
- c# - 为应用程序c#制作json配置