• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 6,  comments - 61,  trackbacks - 0

            This tutorial program shows how to combine the two asynchronous servers that we have just written, into a single server application.

            本例示范了我們如何將已經(jīng)實(shí)現(xiàn)的兩種異步服務(wù)整合為一個(gè)服務(wù)器應(yīng)用程序

            The main() function
            
            
            int main()
            {
              
            try
              {
                boost::asio::io_service io_service;

            We will begin by creating a server object to accept a TCP client connection.

             我們首先創(chuàng)建一個(gè)用于接收TCP客戶端連接的服務(wù)器對(duì)象。

            
            
               tcp_server server1(io_service);

            We also need a server object to accept a UDP client request.

            我們也需要一個(gè)用于接收UDP客戶端請(qǐng)求的服務(wù)器對(duì)象。

            
            
            udp_server server2(io_service);

            We have created two lots of work for the boost::asio::io_service object to do.

            這樣我們就已經(jīng)創(chuàng)建兩個(gè)需要完成很多工作的服務(wù)器,而這些工作都由boost::asio::io_service對(duì)象完成

            
            
               io_service.run();
              }
              
            catch (std::exception& e)
              {
                std::cerr 
            << e.what() << std::endl;
              }

              
            return 0;
            }
            The tcp_connection and tcp_server classes

            TCP連接和TCP服務(wù)器類

            The following two classes are taken from Daytime.3 .

            下面的兩個(gè)類實(shí)例來(lái)自例子Daytime.3。

            
            
            class tcp_connection
              : 
            public boost::enable_shared_from_this<tcp_connection>
            {
            public:
              typedef boost::shared_ptr
            <tcp_connection> pointer;

              
            static pointer create(boost::asio::io_service& io_service)
              {
                
            return pointer(new tcp_connection(io_service));
              }

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

              
            void start()
              {
                message_ 
            = make_daytime_string();

                boost::asio::async_write(socket_, boost::asio::buffer(message_),
                    boost::bind(
            &tcp_connection::handle_write, shared_from_this()));
              }

            private:
              tcp_connection(boost::asio::io_service
            & io_service)
                : socket_(io_service)
              {
              }

              
            void handle_write()
              {
              }

              tcp::socket socket_;
              std::
            string message_;
            };

            class tcp_server
            {
            public:
              tcp_server(boost::asio::io_service
            & io_service)
                : acceptor_(io_service, tcp::endpoint(tcp::v4(), 
            13))
              {
                start_accept();
              }

            private:
              
            void start_accept()
              {
                tcp_connection::pointer new_connection 
            =
                  tcp_connection::create(acceptor_.io_service());

                acceptor_.async_accept(new_connection
            ->socket(),
                    boost::bind(
            &tcp_server::handle_accept, this, new_connection,
                      boost::asio::placeholders::error));
              }

              
            void handle_accept(tcp_connection::pointer new_connection,
                  
            const boost::system::error_code& error)
              {
                
            if (!error)
                {
                  new_connection
            ->start();
                  start_accept();
                }
              }

              tcp::acceptor acceptor_;
            };
            The udp_server class

            UDP服務(wù)器類

            Similarly, this next class is taken from the previous tutorial step .

            同樣,下面的這個(gè)類實(shí)例也是來(lái)自以前的示例程序。

            
            
            class udp_server
            {
            public:
              udp_server(boost::asio::io_service
            & io_service)
                : socket_(io_service, udp::endpoint(udp::v4(), 
            13))
              {
                start_receive();
              }

            private:
              
            void start_receive()
              {
                socket_.async_receive_from(
                    boost::asio::buffer(recv_buffer_), remote_endpoint_,
                    boost::bind(
            &udp_server::handle_receive, this,
                      boost::asio::placeholders::error));
              }

              
            void handle_receive(const boost::system::error_code& error)
              {
                
            if (!error || error == boost::asio::error::message_size)
                {
                  boost::shared_ptr
            <std::string> message(
                      
            new std::string(make_daytime_string()));

                  socket_.async_send_to(boost::asio::buffer(
            *message), remote_endpoint_,
                      boost::bind(
            &udp_server::handle_send, this, message));

                  start_receive();
                }
              }

              
            void handle_send(boost::shared_ptr<std::string> /*message*/)
              {
              }

              udp::socket socket_;
              udp::endpoint remote_endpoint_;
              boost::array
            <char1> recv_buffer_;
            };

            See the full source listing

            全部源碼:

            //
            // 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 
            <ctime>
            #include 
            <iostream>
            #include 
            <string>
            #include 
            <boost/array.hpp>
            #include 
            <boost/bind.hpp>
            #include 
            <boost/shared_ptr.hpp>
            #include 
            <boost/enable_shared_from_this.hpp>
            #include 
            <boost/asio.hpp>

            using boost::asio::ip::tcp;
            using boost::asio::ip::udp;

            std::
            string make_daytime_string()
            {
              
            using namespace std; // For time_t, time and ctime;
              time_t now = time(0);
              
            return ctime(&now);
            }

            class tcp_connection
              : 
            public boost::enable_shared_from_this<tcp_connection>
            {
            public:
              typedef boost::shared_ptr
            <tcp_connection> pointer;

              
            static pointer create(boost::asio::io_service& io_service)
              {
                
            return pointer(new tcp_connection(io_service));
              }

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

              
            void start()
              {
                message_ 
            = make_daytime_string();

                boost::asio::async_write(socket_, boost::asio::buffer(message_),
                    boost::bind(
            &tcp_connection::handle_write, shared_from_this()));
              }

            private:
              tcp_connection(boost::asio::io_service
            & io_service)
                : socket_(io_service)
              {
              }

              
            void handle_write()
              {
              }

              tcp::socket socket_;
              std::
            string message_;
            };

            class tcp_server
            {
            public:
              tcp_server(boost::asio::io_service
            & io_service)
                : acceptor_(io_service, tcp::endpoint(tcp::v4(), 
            13))
              {
                start_accept();
              }

            private:
              
            void start_accept()
              {
                tcp_connection::pointer new_connection 
            =
                  tcp_connection::create(acceptor_.io_service());

                acceptor_.async_accept(new_connection
            ->socket(),
                    boost::bind(
            &tcp_server::handle_accept, this, new_connection,
                      boost::asio::placeholders::error));
              }

              
            void handle_accept(tcp_connection::pointer new_connection,
                  
            const boost::system::error_code& error)
              {
                
            if (!error)
                {
                  new_connection
            ->start();
                  start_accept();
                }
              }

              tcp::acceptor acceptor_;
            };

            class udp_server
            {
            public:
              udp_server(boost::asio::io_service
            & io_service)
                : socket_(io_service, udp::endpoint(udp::v4(), 
            13))
              {
                start_receive();
              }

            private:
              
            void start_receive()
              {
                socket_.async_receive_from(
                    boost::asio::buffer(recv_buffer_), remote_endpoint_,
                    boost::bind(
            &udp_server::handle_receive, this,
                      boost::asio::placeholders::error));
              }

              
            void handle_receive(const boost::system::error_code& error)
              {
                
            if (!error || error == boost::asio::error::message_size)
                {
                  boost::shared_ptr
            <std::string> message(
                      
            new std::string(make_daytime_string()));

                  socket_.async_send_to(boost::asio::buffer(
            *message), remote_endpoint_,
                      boost::bind(
            &udp_server::handle_send, this, message));

                  start_receive();
                }
              }

              
            void handle_send(boost::shared_ptr<std::string> /*message*/)
              {
              }

              udp::socket socket_;
              udp::endpoint remote_endpoint_;
              boost::array
            <char1> recv_buffer_;
            };

            int main()
            {
              
            try
              {
                boost::asio::io_service io_service;
                tcp_server server1(io_service);
                udp_server server2(io_service);
                io_service.run();
              }
              
            catch (std::exception& e)
              {
                std::cerr 
            << e.what() << std::endl;
              }

              
            return 0;
            }
            posted on 2008-04-21 09:24 王曉軒 閱讀(4184) 評(píng)論(7)  編輯 收藏 引用 所屬分類: C\C++
            久久婷婷人人澡人人爽人人爱| 亚洲午夜无码久久久久| 久久99国产精品成人欧美| 久久久久免费视频| 伊人久久大香线蕉av不变影院| 青青草原综合久久大伊人精品| 一97日本道伊人久久综合影院| 三上悠亚久久精品| 久久亚洲中文字幕精品一区| 久久精品毛片免费观看| 久久亚洲中文字幕精品一区四 | 中文字幕精品无码久久久久久3D日动漫| 久久精品国产亚洲AV不卡| 亚洲午夜久久影院| 无码专区久久综合久中文字幕| 无码8090精品久久一区| 韩国三级大全久久网站| 亚洲AV无码久久| 久久亚洲sm情趣捆绑调教| 老司机午夜网站国内精品久久久久久久久| 国产精品久久久久国产A级| 天天爽天天狠久久久综合麻豆| 亚洲日韩欧美一区久久久久我| 国产精品丝袜久久久久久不卡| 久久综合欧美成人| 久久国产精品久久精品国产| 久久综合九色综合网站| 99精品久久久久久久婷婷| 亚洲欧美国产日韩综合久久| 久久免费99精品国产自在现线 | 亚洲综合久久夜AV | 亚洲国产精品综合久久一线 | 99久久久精品免费观看国产| 99久久精品日本一区二区免费 | 久久99国产精品久久99小说 | 99久久免费国产精品| 伊人久久综在合线亚洲2019| 91久久精品无码一区二区毛片| 久久精品综合一区二区三区| 色综合久久88色综合天天 | 久久婷婷色综合一区二区|