簡體   English   中英

如何在boost :: asio中讀取數據包

[英]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_tuint16_t可以讓您執行此操作,而不必擔心您的體系結構的int是否不是32位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM