[英]How to read a packet in 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::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))...
如果我理解你的問題。 只需設置變量及其大小即可緩沖
http://think-async.com/Asio/boost_asio_1_3_1/doc/html/boost_asio/reference/buffer.html
懷疑您一年后需要此答案,但對於普通大眾:
在您的代碼中,緩沖區通過引用傳遞。 這樣,當asio異步調用您的讀取處理程序( Client::handleRead
)時,它將已將該緩沖區的內容更新為所接收的內容。
緩沖區只是具有指定大小的數組。 Asio不會將緩沖區填充超過您在boost::asio::buffer(ptr, size)
指定的boost::asio::buffer(ptr, size)
,因此,如果您需要32位整數,則將指針傳遞給size = 4個字節的數組開頭,然后在調用讀取處理程序時將其轉換為32位int類型(可能是stdint.h
uint32_t
)。
通常,當您不需要整個32位整數時,可以通過傳遞16位或8位來節省大量內存。 uint8_t
和uint16_t
可以讓您執行此操作,而不必擔心您的體系結構的int
是否不是32位。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.