2014-09-05 148 views
3

我想使用boost asio在TCP/IP堆棧上實現協議。協議的長度--PDU包含在其前6個字節中。現在使用asio提供的同步讀取方法,我可以準確讀取前6個字節,計算長度n然後準確讀取n字節以獲得整個PDU。「兩步」async_read with boost asio

雖然我寧願使用異步方法,但在asio文檔中學習example給我留下了一個問題。作者使用socket成員函數async_read_some(),它從套接字讀取一個(看起來對我來說)不確定數量的數據。 我如何應用第一段中描述的「兩步」過程來接收完整的PDU?還是有我的問題的另一個明智的解決方案?


回答

4

使用非成員函數async_read來讀取固定金額。

例如,使用一個緩衝一個std::vector或類似:

// read the header 
buffer.resize(6); 
async_read(socket, boost::asio::buffer(buffer), 
    [=](const boost::system::error_code & error, size_t bytes){ 
     if (!error) { 
      assert(bytes == 6); 

      // read the payload 
      buffer.resize(read_size(buffer)); 
      async_read(socket, boost::asio::buffer(buffer), 
       [=](const boost::system::error_code & error, size_t bytes){ 
        if (!error) { 
          // process the payload 
        } 
       }); 
     } 
    }); 
+0

調用第一的ReadHandler第二async_read是我不能來了。謝謝。 – 2014-09-05 13:52:23

相關問題