C++ 如何在boost::asio中读取数据包

C++ 如何在boost::asio中读取数据包,c++,boost,boost-asio,C++,Boost,Boost Asio,如何读取boost::asio中的数据包,例如0x01,当前代码只读取文本: m_socket.async_read_some(boost::asio::buffer(buffer), strand.wrap(boost::bind(&Client::handleRead, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::byt

如何读取boost::asio中的数据包,例如0x01,当前代码只读取文本:

   m_socket.async_read_some(boost::asio::buffer(buffer),
       strand.wrap(boost::bind(&Client::handleRead, shared_from_this(),
       boost::asio::placeholders::error,
       boost::asio::placeholders::bytes_transferred)));

谢谢,您可以使用int变量分配缓冲区,而不是使用从套接字读取的值

int m_hdr_size = 0; // this var must be not local

boost::asio::async_read_some(
boost::asio::buffer(reinterpret_cast<char*>(&m_hdr_size), size_t(4))...
int m_hdr_size=0;//此变量必须不是本地变量
boost::asio::异步读取(
boost::asio::buffer(重新解释强制转换(&m_hdr_大小),大小(4))。。。
若我理解你们的问题,就把变量和它的大小设为缓冲区


您好,您可以使用int变量分配缓冲区,然后使用从套接字读取的值

int m_hdr_size = 0; // this var must be not local

boost::asio::async_read_some(
boost::asio::buffer(reinterpret_cast<char*>(&m_hdr_size), size_t(4))...
int m\u hdr\u size=0;//此变量必须不是本地变量
boost::asio::异步读取(
boost::asio::buffer(重新解释强制转换(&m_hdr_大小),大小(4))。。。
若我理解你们的问题,就把变量和它的大小设为缓冲区


毫无疑问,一年后你需要这个答案,但对于普通大众来说:

在您的代码中,缓冲区是通过引用传递的。这样,当asio异步调用您的读取处理程序(
Client::handleRead
)时,它会将该缓冲区的内容更新为它接收到的内容

缓冲区只是一个具有指定大小的数组。Asio填充缓冲区的大小不会超过您在
boost::Asio::buffer(ptr,size)
中指定的大小,因此,如果您需要一个32位整数,请向它传递一个指向数组开头的指针(size=4字节),然后将其转换为32位int类型(可能是来自
stdint.h
uint32\u t
)调用读取处理程序时


当您不需要整个32位整数时,通常可以通过传递16位或8位来节省大量内存。
uint8\u t
uint16\u t
可以让您做到这一点,而不必担心您的体系结构的
int
是否不是32位。

一年后您是否需要这个答案,但对于一般的p公共:

在您的代码中,缓冲区是通过引用传递的。这样,当asio异步调用您的读取处理程序(
Client::handleRead
)时,它会将该缓冲区的内容更新为它接收到的内容

缓冲区只是一个具有指定大小的数组。Asio填充缓冲区的大小不会超过您在
boost::Asio::buffer(ptr,size)
中指定的大小,因此,如果您需要一个32位整数,请向它传递一个指向数组开头的指针(size=4字节),然后将其转换为32位int类型(可能是来自
stdint.h
uint32\u t
)调用读取处理程序时


当您不需要整个32位整数时,通常可以通过传递16位或8位来节省大量内存。
uint8\u t
uint16\u t
可以让您做到这一点,而不必担心您的体系结构的
int
是否不是32位。

asio 1.3.1非常过时,最新版本是或iasio 1.3.1相当过时,最新版本为或