Boost asio 學習筆記

2021-07-04 12:53:59 字數 2717 閱讀 4235

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::socket

boost::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:80

115.239.210.27:443

0.0.0.0:13

socket 分為 tcp 、 udp 、imcp 等

非同步

注意 : 這八個介面並不保證接收足量的資料,如果需要讀寫一定數目後才響應, 需要使用非成員函式:

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...