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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

boost asio 简单示例

發(fā)布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 boost asio 简单示例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
客戶端:
  • #include <iostream>
  • #include <boost/asio.hpp>
  • #include <boost/bind.hpp>
  • #include <boost/shared_ptr.hpp>
  • #include <boost/enable_shared_from_this.hpp>

  • using boost::asio::ip::tcp;
  • using boost::asio::ip::address;

  • class session: public boost::enable_shared_from_this<session> {
  • public:
  • ????session(boost::asio::io_service &io_service, tcp::endpoint &endpoint)
  • ????????: io_service_(io_service), socket_(io_service), endpoint_(endpoint)
  • ????{
  • ????}

  • ????void start() {
  • ????????socket_.async_connect(endpoint_,
  • ????????????????boost::bind(&session::handle_connect,
  • ????????????????????shared_from_this(),
  • ????????????????????boost::asio::placeholders::error));
  • ????}

  • private:
  • ????void handle_connect(const boost::system::error_code &error) {
  • ????????if (error) {
  • ????????????if (error.value() != boost::system::errc::operation_canceled) {
  • ????????????????std::cerr << boost::system::system_error(error).what() << std::endl;
  • ????????????}

  • ????????????socket_.close();
  • ????????????return;
  • ????????}

  • ????????static tcp::no_delay option(true);
  • ????????socket_.set_option(option);

  • ????????strcpy(buf, "Hello World!\n");
  • ????????boost::asio::async_write(socket_,
  • ????????????????boost::asio::buffer(buf, strlen(buf)),
  • ????????????????boost::bind(&session::handle_write,
  • ????????????????????shared_from_this(),
  • ????????????????????boost::asio::placeholders::error,
  • ????????????????????boost::asio::placeholders::bytes_transferred));
  • ????}

  • ????void handle_write(const boost::system::error_code& error, size_t bytes_transferred) {
  • ????????memset(buf, sizeof(buf), 0);
  • ????????boost::asio::async_read_until(socket_,
  • ????????????????sbuf,
  • ????????????????"\n",
  • ????????????????boost::bind(&session::handle_read,
  • ????????????????????shared_from_this(),
  • ????????????????????boost::asio::placeholders::error,
  • ????????????????????boost::asio::placeholders::bytes_transferred));
  • ????}

  • ????void handle_read(const boost::system::error_code& error, size_t bytes_transferred) {
  • ????????std::cout << buf << std::endl;
  • ????}

  • private:
  • ????boost::asio::io_service &io_service_;
  • ????tcp::socket socket_;
  • ????tcp::endpoint &endpoint_;
  • ????char buf[1024];
  • ????boost::asio::streambuf sbuf;
  • };

  • typedef boost::shared_ptr<session> session_ptr;

  • int main(int argc, char* argv[])
  • {
  • ????boost::asio::io_service io_service;
  • ????tcp::endpoint endpoint(address::from_string("192.168.1.1"), 10028);

  • ????session_ptr new_session(new session(io_service, endpoint));
  • ????new_session->start();
  • ????io_service.run();
  • ????return 0;
  • }

  • 服務(wù)器:
  • #include <string.h>
  • #include <boost/asio.hpp>
  • #include <boost/bind.hpp>
  • #include <boost/shared_ptr.hpp>
  • #include <boost/enable_shared_from_this.hpp>

  • using boost::asio::ip::tcp;
  • using boost::asio::ip::address;

  • class session: public boost::enable_shared_from_this<session> {
  • public:
  • ????session(boost::asio::io_service &io_service): socket_(io_service)
  • ????{
  • ????}

  • ????void start() {
  • ????????static tcp::no_delay option(true);
  • ????????socket_.set_option(option);

  • ????????boost::asio::async_read_until(socket_,
  • ????????????????sbuf_,
  • ????????????????"\n",
  • ????????????????boost::bind(&session::handle_read,
  • ????????????????????shared_from_this(),
  • ????????????????????boost::asio::placeholders::error,
  • ????????????????????boost::asio::placeholders::bytes_transferred));
  • ????}

  • ????tcp::socket &socket() {
  • ????????return socket_;
  • ????}

  • private:
  • ????void handle_write(const boost::system::error_code& error, size_t bytes_transferred) {
  • ????????boost::asio::async_read_until(socket_,
  • ????????????????sbuf_,
  • ????????????????"\n",
  • ????????????????boost::bind(&session::handle_read,
  • ????????????????????shared_from_this(),
  • ????????????????????boost::asio::placeholders::error,
  • ????????????????????boost::asio::placeholders::bytes_transferred));
  • ????}

  • ????void handle_read(const boost::system::error_code& error, size_t bytes_transferred) {
  • ????????boost::asio::async_write(socket_,
  • ????????????????sbuf_,
  • ????????????????boost::bind(&session::handle_write,
  • ????????????????????shared_from_this(),
  • ????????????????????boost::asio::placeholders::error,
  • ????????????????????boost::asio::placeholders::bytes_transferred));
  • ????}

  • private:
  • ????tcp::socket socket_;
  • ????boost::asio::streambuf sbuf_;
  • };

  • typedef boost::shared_ptr<session> session_ptr;

  • class server {
  • public:
  • ????????server(boost::asio::io_service &io_service, tcp::endpoint &endpoint)
  • ????????????: io_service_(io_service), acceptor_(io_service, endpoint)
  • ????????{
  • ????????????session_ptr new_session(new session(io_service_));
  • ????????????acceptor_.async_accept(new_session->socket(),
  • ????????????????boost::bind(&server::handle_accept,
  • ????????????????????this,
  • ????????????????????new_session,
  • ????????????????????boost::asio::placeholders::error));
  • ????????}

  • ????????void handle_accept(session_ptr new_session, const boost::system::error_code& error) {
  • ????????????if (error) {
  • ????????????????return;
  • ????????????}

  • ????????????new_session->start();
  • ????????????new_session.reset(new session(io_service_));
  • ????????????acceptor_.async_accept(new_session->socket(),
  • ????????????????boost::bind(&server::handle_accept,
  • ????????????????????this,
  • ????????????????????new_session,
  • ????????????????????boost::asio::placeholders::error));
  • ????????}

  • ????????void run() {
  • ??????????? io_service_.run();
  • ????????}

  • private:
  • ????????boost::asio::io_service &io_service_;
  • ????????tcp::acceptor acceptor_;
  • };

  • int main(int argc, char* argv[])
  • {
  • ????boost::asio::io_service io_service;
  • ????tcp::endpoint endpoint(address::from_string("192.168.1.1"), 10028);

  • ????server s(io_service, endpoint);
  • ????s.run();
  • ????return 0;
  • }

  • 編譯:
    g++ -Wall -o client client.cpp -lboost_system
    g++ -Wall -o server server.cpp -lboost_system

    這里需要注意的是: async_write, async_read, async_read_until 都是需要達(dá)到特定條件才會調(diào)用回調(diào)函數(shù),
    在調(diào)用回調(diào)函數(shù)之前, 不能再次調(diào)用, 否則接收到的數(shù)據(jù)很可能是亂的. 所以, 在實際代碼當(dāng)中, 會有一個寫緩沖隊列, 當(dāng)需要write的時, 先放到隊列中, 如果隊列個數(shù)為1, 則調(diào)用async_write, 否則等待函數(shù)回調(diào), 當(dāng)函數(shù)回調(diào)時將首個元素從隊列中移除, 然后接著發(fā)送下一個, 直到隊列為空.

    對于client, 由于is_open在async_connect之后就是true狀態(tài)了, 因此在async_connect回調(diào)返回之前沒有方法知道是否已經(jīng)連接成功, 實際代碼當(dāng)中一般會增加一個變量以表示該套接字是否已經(jīng)允許發(fā)送數(shù)據(jù).

    總結(jié)

    以上是生活随笔為你收集整理的boost asio 简单示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 少女忠诚电影高清免费 | 国产伦精品一区二区三区视频网站 | 国产一区啪啪 | 被绑在床强摁做开腿呻吟 | 美女脱光衣服让男人捅 | 日本在线视频观看 | 亚洲看片网 | 丰满大爆乳波霸奶 | 小伸进喷水网站 | 大乳女喂男人吃奶视频 | 黑人巨大精品一区二区在线 | 亚洲视频在线播放 | 欧美大片在线免费观看 | 黄视频免费在线观看 | 国产精品羞羞答答 | 中文字幕激情小说 | 亚洲一区免费在线观看 | 中文婷婷| 欧美 日本 国产 | www在线观看视频 | 优优色综合 | 午夜视频在线免费看 | 在线不卡一区二区 | 夜夜添无码一区二区三区 | 开心成人激情 | 亚洲天堂视频网 | 日韩爱爱片 | caopor超碰| 男人的天堂狠狠干 | www成年人 | v99av| 国产精品欧美亚洲 | 69亚洲精品 | 可以免费看的av毛片 | 亚洲精品午夜 | 婷婷九月综合 | 东北熟女一区二区三区 | 精品久久久久久久免费人妻 | 国产真人无码作爱视频免费 | 欧美一级黄色片 | 欧美色欧美| 成人动漫视频 | 欧美日韩亚洲不卡 | 中文字幕 日本 | 中文字幕www | 国产日韩免费视频 | 自拍偷拍亚洲欧美 | 99久久综合国产精品二区 | 国产在线精品成人欧美 | 91视频在线观看网站 | 久久久精品国产 | 国产一区不卡视频 | 欧美日韩一区视频 | 香蕉国产| 都市激情校园春色 | 粉嫩av一区二区三区免费观看 | 97人妻精品一区二区三区免费 | 人妻毛片 | 制服丝袜天堂 | 美女扒开尿口给男人看 | 69久久精品无码一区二区 | 色视频在线免费观看 | 免费 成 人 黄 色 | 久久综合狠狠综合久久综合88 | 亚洲午夜国产 | 综合色婷婷一区二区亚洲欧美国产 | 中文字幕在线字幕中文 | 岳睡了我中文字幕日本 | 波多野吉衣一二三区乱码 | 超碰超碰| 欧美 日韩 精品 | 香蕉毛片 | 国产77777 | 国产夫妻露脸 | 91精品国产乱码久久 | 熟女精品一区二区三区 | 成人av电影网站 | 日本黄a三级三级三级 | 欧美顶级少妇做爰 | 欧美性一区二区 | 精品黑人一区二区三区在线观看 | 综合色婷婷一区二区亚洲欧美国产 | 婷婷六月丁 | 亚洲狼人av| 亚洲av无码一区东京热久久 | 天天草视频 | 精品国产污污免费网站入口 | 丝袜调教91porn | 欧美a性 | 韩国禁欲系高级感电影 | 中日韩毛片 | 性色av免费观看 | 日韩欧美在线观看一区 | 欧美又粗又长 | 老司机在线精品视频 | www国产精品内射老熟女 | 男女激情在线观看 | 欧美bdsm调教视频 | 雷电将军和丘丘人繁衍后代视频 |