簡體   English   中英

在boost :: asio中,為什么沒有用於讀/寫的套接字成員函數?

[英]In boost::asio, why are there no socket member functions for read/write?

我使用boost asio處理客戶端/服務器應用程序,特別是boost::asio::ip::tcp::socket來連接和傳輸數據。 現在我使用boost::asio::async_readboost::asio::async_read一定數量的字節。 到目前為止,在所有情況下,我都知道在調用處理程序之前我想要接收多少字節。 因此我沒有看到使用套接字read_some函數read_some 但我想知道為什么沒有boost::asio::ip::tcp::socket “async_read”成員函數,只有免費的。

所以我的問題是:是否存在概念或技術原因,為什么有一個read_some成員函數但沒有read成員函數,或者“Boost只是忘了實現它”?

Asio中的所有流接口都提供read_someasync_read_some moethods。 這適用於TCP套接字,SSL流和串行端口。 readread_until及其異步兄弟的實現都基於使用read_some方法具有相同的實現。 read函數被寫為通用模板,可以在其第一個參數上使用read_some方法來執行您請求的調用。

有些C ++倡導者建議盡可能使用非朋友非成員函數,以便在類實現更改時最小化更改。 read_some是接口, read只是一個包裝器,在各種不同源的部分讀取的情況下添加阻塞。

正如Dave S所說,你會發現這些是boost \\ boost \\ asio \\ read.hpp中的外部輔助函數

如果查看boost 1.52 asio示例blocking_tcp_echo_clientblocking_tcp_echo_server示例將使用write()的阻塞形式。 該示例使用read_some()因為它不會預先知道大小...但是寫功能完全類似於你讀的問題,也存在作為輔助write.hpp在同一個地方作為read.hpp

基本上:

 tcp::socket s(io_service);
 char buff[LENGTH];
 boost::asio::write(s, boost::asio::buffer(buff, LENGTH));
 boost::asio::read(s, boost::asio::buffer(buff, LENGTH));

暫無
暫無

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

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