標籤: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處理