boost asio 是個一由c++編寫的、 跨平台的、 使用現代化c++方法的、 提供了統一的非同步模型的網路和底層i/o 開發庫。
個人理解 : io_service 就是boost::asio 基於os的i/o引擎, 其他的功能是建立在它之上的 。io_service 擁有所有非同步i/o物件( socket 、 deadline_timer … ) 需要的核心i/o功能 。 包括 :
boost::asio::ip::tcp::socketboost::asio::ip::tcp::acceptor
boost::asio::ip::udp::socket
deadline_timer.
多執行緒安全
使用work
終止無限的run()
介面
boost::asio
::io_service io_service;
auto_ptr::io_service
::work
> work(new boost::asio
::io_service
::work(io_service));
...work.reset(); // allow run() to exit.
示例** ( 僅tcp)
#include
#include
int main()
輸出 :
115.239.210.27:80socket 分為 tcp 、 udp 、imcp 等115.239.210.27:443
0.0.0.0:13
非同步
注意 : 這八個介面並不保證接收足量的資料,如果需要讀寫一定數目後才響應, 需要使用非成員函式:
4 buffer
buffer 是用來儲存快取二進位制資料塊的地方。
read*
和write*
介面並不直接接收***_buffer
, 它們介紹的是buffer的序列。
也就是以容器(vector 、 list) 裝載的***_buffer
。
單個的***_buffer
可以轉化***_buffers_1
來被傳遞。
常用的介面:
server.cpp
#include
#include
#include
static int i = 0;
class
tcpconn : private
boost::noncopyable,
public std:
:enable_shared_from_this
~tcpconn()
void startecho();
void echo( boost:
:system
::error_code e );
boost:
:asio
::ip
::tcp
::socket & getsocket()
private:
std:
:array, 1024> buf__;
boost:
:asio
::ip
::tcp
::socket sock__;
};void tcpconn::startecho()
catch( ... )
}void tcpconn::echo( boost:
:system
::error_code e )
startecho();
}class
tcpserver
void startaccept();
void dealconn(std:
:shared_ptr, boost:
:system
::error_code );
private:
boost:
:asio
::ip
::tcp
::acceptor accp__;
boost:
:asio
::io_service & ios__;
};void tcpserver::startaccept()
void tcpserver::dealconn(std:
:shared_ptr ptk, boost:
:system
::error_code e)
startaccept();
}int main()
client.cpp#include
#include
#include
int main()while(2);
//never come here
return
0;}
Boost asio學習筆記 網路程式設計
boost庫中的網路程式設計的例子比較複雜,不太好理解,所以,從網上找了乙個簡單點的例子。如下 經過修改,可以執行。伺服器 servier.cpp include include bind hpp include include include iostream using boost asio i...
Boost asio 心得筆記
boost asio中有兩點用的不爽 1.asio中的所有物件都引用io service 2.async write還要自己保證內存在completed之前有效 有空要把這兩點搞的更傻瓜一點,實際上在全非同步模式下net io分配兩個執行緒足矣,async搞乙個佇列,completed時候刪掉,還可...
學習boost asio一些小例子
if 0 include include include void handler1 const boost system error code ec void handler2 const boost system error code ec boost asio io service io se...