C++03:使用Boost-用Asio實現簡易Echo Server

來源:互聯網
上載者:User

C++03:使用Boost-用Asio實現簡易Echo Server

C++03:使用Boost-用Asio實現簡易Echo Server 

2009-10-29 11:27 一、編寫代碼

註:以下代碼取自boost 1.40的範例程式碼:

//// async_tcp_echo_server.cpp// ~~~~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//#include <cstdlib>#include <iostream>#include <boost/bind.hpp>#include <boost/asio.hpp>using boost::asio::ip::tcp;class session {public:    session(boost::asio::io_service& io_service) :        socket_(io_service) {    }    tcp::socket& socket() {        return socket_;    }    void start() {        socket_.async_read_some(boost::asio::buffer(data_, max_length),                boost::bind(&session::handle_read, this,                        boost::asio::placeholders::error,                        boost::asio::placeholders::bytes_transferred));    }    void handle_read(const boost::system::error_code& error,            size_t bytes_transferred) {        if (!error) {            boost::asio::async_write(socket_, boost::asio::buffer(data_,                    bytes_transferred), boost::bind(&session::handle_write,                    this, boost::asio::placeholders::error));        } else {            delete this;        }    }    void handle_write(const boost::system::error_code& error) {        if (!error) {            socket_.async_read_some(boost::asio::buffer(data_, max_length),                    boost::bind(&session::handle_read, this,                            boost::asio::placeholders::error,                            boost::asio::placeholders::bytes_transferred));        } else {            delete this;        }    }private:    tcp::socket socket_;    enum {        max_length = 1024    };    char data_[max_length];};class server {public:    server(boost::asio::io_service& io_service, short port) :        io_service_(io_service), acceptor_(io_service, tcp::endpoint(tcp::v4(),                port)) {        session* 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* new_session,            const boost::system::error_code& error) {        if (!error) {            new_session->start();            new_session = new session(io_service_);            acceptor_.async_accept(new_session->socket(), boost::bind(                    &server::handle_accept, this, new_session,                    boost::asio::placeholders::error));        } else {            delete new_session;        }    }private:    boost::asio::io_service& io_service_;    tcp::acceptor acceptor_;};int main(int argc, char* argv[]) {    try {        if (argc != 2) {            std::cerr << "Usage: async_tcp_echo_server <port>\n";            return 1;        }        boost::asio::io_service io_service;        using namespace std;        // For atoi.        server s(io_service, atoi(argv[1]));        io_service.run();    } catch (std::exception& e) {        std::cerr << "Exception: " << e.what() << "\n";    }    return 0;}
二、編譯代碼
$ g++ -g3 -Wall -o"async_tcp_echo_server" async_tcp_echo_server.cpp -lboost_system

注意:boost.asio庫依賴boost_system

三、運行 async_tcp_echo_server
$ ./async_tcp_echo_server 8868   # 8868 是async_tcp_echo_server listen的連接埠號碼
四、用 telnet 命令作為用戶端測試

新開啟一個終端,注意:同樣要登入到Linux實驗室,執行: telnet localhost 8868

$ telnet localhost 8868Trying ::1...Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.the first line    # 這是我們的輸入the first line    # 這是伺服器 async_tcp_echo_server 的回應,以下類推the second linethe second linewelcome to xuanyuan-soft.org.cn!welcome to xuanyuan-soft.org.cn!
五、關於Boost更多的資訊

請訪問Boost的首頁:http://www.boost.org/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.