c++非同步socket處理

來源:互聯網
上載者:User

標籤:hello   this   osi   write   監聽   串連   sock   cat   取資料   

伺服器端:

#include <boost/thread.hpp>#include <boost/asio.hpp>#include <boost/date_time/posix_time/posix_time.hpp>class Server{private:boost::asio::io_service &ios;boost::asio::ip::tcp::acceptor acceptor;typedef boost::shared_ptr<boost::asio::ip::tcp::socket> sock_pt;public:Server(boost::asio::io_service &io) : ios(io),acceptor(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 6688)){start();}void start(){sock_pt sock(new boost::asio::ip::tcp::socket(ios)); // 智能指標acceptor.async_accept(*sock,boost::bind(&Server::accept_handler, this, _1, sock)); // 非同步監聽服務}void accept_handler(const boost::system::error_code &e, sock_pt sock){if (e) // 檢測錯誤碼{return;}std::cout << "client: ";std::cout << sock->remote_endpoint().address() << std::endl;sock->async_write_some(boost::asio::buffer("hello client..."),boost::bind(&Server::write_hander, this, _1));start(); // 再次啟動非同步監聽}void write_hander(const boost::system::error_code &e){std::cout << "send message complete." << std::endl;}};int main(){try{std::cout << "server start..." << std::endl;boost::asio::io_service ios;Server server(ios);ios.run(); // 啟動非同步呼叫事件處理迴圈}catch (std::exception &e){std::cout << e.what() << std::endl;}return 0;}

  

用戶端:

#include <boost/thread.hpp>#include <boost/asio.hpp>#include <boost/date_time/posix_time/posix_time.hpp>#include <vector>class Client{private:boost::asio::io_service &ios;boost::asio::ip::tcp::endpoint ep;typedef boost::shared_ptr<boost::asio::ip::tcp::socket> sock_pt;public:Client(boost::asio::io_service &io) :ios(io),ep(boost::asio::ip::address::from_string("127.0.0.1"), 6688){start(); // 啟動非同步串連}void start(){sock_pt sock(new boost::asio::ip::tcp::socket(ios));sock->async_connect(ep, boost::bind(&Client::conn_hander, this, _1, sock)); // 非同步串連}void conn_hander(const boost::system::error_code &e, sock_pt sock){if (e){return;}std::cout << "recive from " << sock->remote_endpoint().address() << ": ";boost::shared_ptr<std::vector<char> > str(new std::vector<char>(100, 0));sock->async_read_some(boost::asio::buffer(*str),boost::bind(&Client::read_hander, this, _1, str)); // 非同步讀取資料start(); // 再次啟動非同步串連}void read_hander(const boost::system::error_code &e, boost::shared_ptr<std::vector<char> > str){if (e){return;}std::cout << &(*str)[0] << std::endl;}};int main(){try{std::cout << "client start..." << std::endl;boost::asio::io_service ios;Client client(ios);ios.run();}catch (std::exception &e){std::cout << e.what() << std::endl;}return 0;}

  

c++非同步socket處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.