日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Boost.Asio使用实例

發布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Boost.Asio使用实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、概述: Boost.Asio是一個跨平臺的C++庫,用于網絡和底層I/O編程,可以在I/O對象(如socket)上執行同步和異步操作。

  2、簡略的過程分析。以socket的連接操作為例:

  你的程序中需要至少定義一個io_service對象:boost::asio::io_service io_service。io_service表示程序到操作系統I/O服務的“連接”。

  為執行I/O操作,還需要一個I/O對象(通常需要使用io_service構造),如一個TCP套接字:boost::asio::ip::tcp::socket socket(io_service)。

  1)同步的連接過程中,發生以下事件序列(對應下面的左圖):

  (1)程序通過I/O對象啟動連接操作:socket.connect(server_endpoint);

  (2)I/O對象將請求轉發給io_service;

  (3)io_service請求操作系統去執行連接操作;

  (4)操作系統將操作結果返回給io_service;

  (5)io_service將操作的(錯誤)結果轉換成boost::system::error_code對象,并回傳給I/O對象;

  (6)如果操作失敗,I/O對象拋出boost::system::system_error異常。

  如果是使用以下方式,則只設置錯誤碼,不會拋出異常:

boost::system::error_code ec; socket.connect(server_endpoint, ec);

  2)異步的連接過程中,發生以下事件序列(對應下面的中圖和右圖):

  (1)程序通過I/O對象啟動連接操作:socket.async_connect(server_endpoint, your_completion_handler);

  your_completion_handler是一個函數(對象),原型:void your_completion_handler(const boost::system::error_code& ec);

  (2)I/O對象將請求轉發給io_service;

  (3)io_service發信號給操作系統,告知它去開始一個異步的連接操作;

  一段時間過去... ...注意,在同步的情形下,程序會一直等待連接操作完成,而異步則是先立即返回。

  (4)連接操作完成時,操作系統把結果放在隊列中

  (5)程序必須調用io_service::run()(或類似函數)以取得操作結果。一般在你剛啟動第一個異步操作時就要調用run();

  io_service對象未停止(stopped()返回false)且還有未完成的操作時,run()會一直阻塞,否則直接返回。

  我的理解(io_service對象未停止時):如果當前有未完成的異步操作且隊列為空,則需要等待,因此run()將阻塞(在Linux下借助pstack可知是阻塞于epoll_wait()或pthread_cond_wait()等)。操作系統完成某個異步操作后,把結果放到隊列并通知應用程序。run()被“喚醒”,從隊列中取出結果并調用相應的回調函數;如果當前沒有未完成的異步操作且隊列為空,表示所有異步操作已經完成,則run()將直接返回;當然,如果當前隊列非空,則run()直接取出結果并調用回調函數。

  asio保證了回調函數只會被run()所在線程調用。因此,若沒有run(),回調函數永遠不會被調用。

  (6)在run()中io_service將操作結果取出隊列并翻譯成error_code,然后傳遞給your_completion_handler

  

  3、例子:

// 一個簡單的回顯服務器 #include <iostream> #include <memory> #include <array> #include <boost/asio.hpp>using boost::asio::ip::tcp;// 服務器和某個客戶端之間的“會話” // 負責處理讀寫事件 class session : public std::enable_shared_from_this<session> { public:session(tcp::socket s) : socket_(std::move(s)) {}void start(){async_read();} private:void async_read(){auto self(shared_from_this());socket_.async_read_some(boost::asio::buffer(data_), // 異步讀[this, self](const boost::system::error_code &ec, size_t bytes_transferred) // 讀操作完成時回調該函數{ // 捕獲`self`使shared_ptr<session>的引用計數增加1,在該例中避免了async_read()退出時其引用計數變為0if (!ec)async_write(bytes_transferred); // 讀完即寫 });}void async_write(std::size_t length){auto self(shared_from_this());boost::asio::async_write(socket_, boost::asio::buffer(data_, length), // 異步寫[this, self](const boost::system::error_code &ec, size_t){if (!ec)async_read();});}tcp::socket socket_; // “會話”基于已經建立的socket連接std::array<char, 1024> data_; };// 服務器類 // 監聽客戶端連接請求(async_accept)。與某個客戶端建立socket連接后,為它創建一個session class server { public:server(boost::asio::io_service &io_service, short port): acceptor_(io_service, tcp::endpoint(tcp::v4(), port)), socket_(io_service){async_accept();}private:void async_accept(){acceptor_.async_accept(socket_, std::bind(&server::handle_accept, this, std::placeholders::_1)); // 異步accept。socket連接建立后,調用handle_accept() }void handle_accept(const boost::system::error_code &ec){if (!ec){std::shared_ptr<session> session_ptr(new session(std::move(socket_)));session_ptr->start();}async_accept(); // 繼續監聽客戶端連接請求 }tcp::acceptor acceptor_;tcp::socket socket_; };int main(int argc, char* argv[]) {boost::asio::io_service io_service;server s(io_service, 52014);io_service.run();return 0; }

?

?

?

?

  參考資料:

  http://www.boost.org/

總結

以上是生活随笔為你收集整理的Boost.Asio使用实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看av日韩 | 中文精品无码中文字幕无码专区 | 欧美一区中文字幕 | 国产无套粉嫩白浆内谢 | 韩日视频在线观看 | 深爱激情久久 | 一区在线播放 | 在线视频日韩欧美 | 久久久久久久黄色 | 亚洲日本韩国在线 | 香蕉网久久 | 日韩欧美视频在线 | 99热免费观看 | 2020国产精品视频 | 日韩看片 | 国产精品一区二区视频 | 久久久久精 | 欧美二区在线 | 奇米影视奇米色 | 亚洲狠狠婷婷综合久久久久图片 | 脱美女衣服亲摸揉视频 | 欧洲最强rapper网站直播 | 深夜成人在线观看 | 高清不卡一区 | 免费观看理伦片在线播放视频软件 | 黄色小说在线免费观看 | 日韩经典av | 69超碰 | 致命魔术电影高清在线观看 | 日本学生初尝黑人巨免费视频 | 床上激情网站 | 欧美放荡办公室videos4k | 国产精品国产精品 | 亚洲a网| 欧美日韩亚洲一区 | 一区二区在线免费视频 | 操操网站 | 国产精品无码电影 | 波多野结衣中文字幕在线播放 | 欧美成人黄 | 影音先锋亚洲一区 | 成人激情开心 | 精品久久影院 | 都市激情中文字幕 | 亚洲国产影院 | 狠狠天天 | 78m78成人免费网站 | 麻豆成人入口 | 中文字幕一二三 | 亚洲aⅴ乱码精品成人区 | 色视频网站在线观看 | 日本少妇吞精囗交视频 | aa级黄色片 | 国产免费黄色录像 | 久久精品视频网站 | 污污视频在线播放 | 色午夜 | 日日摸夜夜添夜夜添高潮喷水 | 久草在现 | 国产真人无码作爱视频免费 | 清冷男神被c的合不拢腿男男 | 少妇视频一区二区三区 | 五月婷婷网站 | 天堂网在线最新版www中文网 | 亚洲精品小视频 | japanese24hdxxxx中文字幕 | 国产黄大片在线观看画质优化 | 偷拍欧美另类 | 亚洲人人夜夜澡人人爽 | 中国在线观看视频高清免费 | 成人区人妻精品一区二区网站 | 久久久亚洲av波多野结衣 | 卡一卡二卡三 | 欧美美女一级片 | 成人午夜淫片免费观看 | 1024亚洲天堂| 六月婷婷中文字幕 | 国内三级在线 | 性一交一乱一伧老太 | 天天狠狠 | 999精品在线观看 | 国产第一av | 情侣作爱视频网站 | 日本欧美亚洲 | 久久久久国产一区二区三区潘金莲 | 日本在线免费观看 | 日韩精品一区二区三区 | 久久久久久午夜 | 日韩综合区 | 亚洲精品日韩av | 午夜三级av| 伊人网视频 | 欧美中文字幕 | 成人精品福利 | 日本伦理一区 | 欧美久草视频 | 综合亚洲网 | 亚洲精品丝袜 | 99久久久久成人国产免费 |