Boost asio, async_read error
Boost asio, async_read error
这是我的代码:
void do_read_header()
{
std::string incoming_header;
boost::asio::async_read(socket_, boost::asio::buffer(incoming_header, incoming_header.length()), [this, incoming_header](boost::system::error_code ec, std::size_t)
{
if (!ec && check_message(incoming_header))
{
do_read_body();
}
//else
//{
// socket_.close();
//}
});
}
void do_read_body()
{
std::string incoming_message;
boost::asio::async_read(socket_, boost::asio::buffer(incoming_message, incoming_message.length()), [this, incoming_message](boost::system::error_code ec, std::size_t)
{
if (!ec)
{
std::cout.write(incoming_message.c_str(), incoming_message.length());
std::cout << "n";
//do_read_header();
//}
//else
//{
socket_.close();
}
});
}
这是一个修改版本:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/chat/chat_client.cpp
我的代码出了什么问题?
一个问题是incoming_header
和incoming_message
是局部变量,在完成处理程序之前被销毁。你正在捕获它们的副本,而它们仍然是空的;然后操作将写入释放的内存,造成难以言喻的浩劫。
如果一次只需要读取一条消息,那么一种选择是使用成员变量而不是本地变量,并且只捕获this
。或者,您可以动态分配缓冲区,记住在处理程序中删除它。
在任何情况下,请确保事先调整缓冲区的大小,或者使用boost::asio::streambuf
读取任意数量的缓冲区。您正在用零大小初始化缓冲区,因此即使您没有破坏缓冲区,也永远不会得到任何数据。
相关文章:
- "error: no matching function for call to"构造函数错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- C++错误:"error: int aaa::bbb is protected within this context"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- C++ "error: invalid use of void expression"
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 使用 ImageIO.read() 生成的图像是否仍然使用传递给它的相同内存?
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- 对象声明中的模板"error: expected expression"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 文件名:"error reading characters of string"和"unable to read memory"
- 尝试实现简单的 MVC 时 QT 中出现"Internal error: pc 0x0 in read in psymtab, but not in symtab."错误