日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 一二三区视频 | a在线播放| 欧美破处女 | 国产高清在线免费 | 超碰在| 老妇荒淫牲艳史 | 久久一线 | 涩涩的视频在线观看 | 久久久免费观看 | 成人免费网站视频 | 羞羞答答一区 | 日韩免费观看一区二区三区 | 91精品国产91久久久久青草 | 精品人妻无码专区视频 | 又黄又免费的网站 | 在线观看黄色小视频 | 国产天堂 | 国产高清视频在线播放 | 免费看黄在线看 | 香蕉久久网 | 国产精品一区久久久 | 午夜激情一区二区 | 婷婷婷色| 国产成人无码aa精品一区 | 一区二区 亚洲 | 亚洲av区无码字幕中文色 | 国产熟女一区二区丰满 | 成人av在线一区二区 | 国产91热爆ts人妖在线 | 精品视频一区二区三区四区五区 | 国产精品69久久久 | 动漫女被黄漫免费视频 | gai视频在线观看资源 | 在线视频观看国产 | 成人精品一区日本无码网 | 69视频一区二区三区 | 自拍偷拍亚洲精品 | 欧洲亚洲一区 | 涩涩涩av | 国产女合集 | 国产激情视频在线观看 | 天天射,天天干 | 免费视频网站www | 亚洲热在线观看 | 欧美日韩国产在线 | 中国大陆高清aⅴ毛片 | 深田咏美中文字幕 | 国产精品野外户外 | 光棍天堂av | 娇妻高潮浓精白浆xxⅹ | 男女激情在线观看 | 91av看片| 国产一区二区福利 | 国产最新av | 亚洲熟妇无码一区二区三区导航 | 秋霞成人午夜伦在线观看 | 人人草超碰 | 特黄视频| a国产精品 | 色吧久久 | 草草福利视频 | 伊人天天操 | 国产精品5| 97色在线| 伊人青青| 精品久久久中文字幕人妻 | 青青操狠狠干 | 亚洲专区在线 | 97超碰免费| 免费无遮挡在线观看视频网站 | 国产精品7 | 白白色在线播放 | 少妇高潮迭起 | 二级毛片在线观看 | 国产精品视屏 | 欧美 日韩 国产 在线观看 | 成人三级晚上看 | 九七av| 69xxx免费视频 | 丁香花电影在线观看免费高清 | 国产不卡视频在线 | 性做爰视频免费播放大全 | 欧美xx视频| 国产亚洲成人精品 | 久久精品国产亚洲7777 | 91视频在线免费观看 | 91一区二区在线观看 | 欧美色图自拍 | 亚洲三级网站 | 中文在线一区二区三区 | 国产噜噜噜噜噜久久久久久久久 | av资源新版在线天堂 | 偷拍精品一区二区三区 | 黄色特级片| 少妇熟女视频一区二区三区 | 久久久久久久一区二区三区 | 亚色av | 日韩欧美中文字幕在线观看 | 亚洲乱熟女一区二区 |