//// server.cpp// ~~~~~~~~~~//// Copyright (c) 2003-2016 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>usingboost::asio::ip::tcp;usingboost::asio::ip::udp;std::stringmake_daytime_string(){usingnamespacestd;// For time_t, time and ctime;time_tnow=time(0);returnctime(&now);}classtcp_connection:publicboost::enable_shared_from_this<tcp_connection>{public:typedefboost::shared_ptr<tcp_connection>pointer;staticpointercreate(boost::asio::io_service&io_service){returnpointer(newtcp_connection(io_service));}tcp::socket&socket(){returnsocket_;}voidstart(){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){}voidhandle_write(){}tcp::socketsocket_;std::stringmessage_;};classtcp_server{public:tcp_server(boost::asio::io_service&io_service):acceptor_(io_service,tcp::endpoint(tcp::v4(),13)){start_accept();}private:voidstart_accept(){tcp_connection::pointernew_connection=tcp_connection::create(acceptor_.get_io_service());acceptor_.async_accept(new_connection->socket(),boost::bind(&tcp_server::handle_accept,this,new_connection,boost::asio::placeholders::error));}voidhandle_accept(tcp_connection::pointernew_connection,constboost::system::error_code&error){if(!error){new_connection->start();}start_accept();}tcp::acceptoracceptor_;};classudp_server{public:udp_server(boost::asio::io_service&io_service):socket_(io_service,udp::endpoint(udp::v4(),13)){start_receive();}private:voidstart_receive(){socket_.async_receive_from(boost::asio::buffer(recv_buffer_),remote_endpoint_,boost::bind(&udp_server::handle_receive,this,boost::asio::placeholders::error));}voidhandle_receive(constboost::system::error_code&error){if(!error||error==boost::asio::error::message_size){boost::shared_ptr<std::string>message(newstd::string(make_daytime_string()));socket_.async_send_to(boost::asio::buffer(*message),remote_endpoint_,boost::bind(&udp_server::handle_send,this,message));start_receive();}}voidhandle_send(boost::shared_ptr<std::string>/*message*/){}udp::socketsocket_;udp::endpointremote_endpoint_;boost::array<char,1>recv_buffer_;};intmain(){try{boost::asio::io_serviceio_service;tcp_serverserver1(io_service);udp_serverserver2(io_service);io_service.run();}catch(std::exception&e){std::cerr<<e.what()<<std::endl;}return0;}
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.