//// 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/asio.hpp>usingboost::asio::ip::udp;std::stringmake_daytime_string(){usingnamespacestd;// For time_t, time and ctime;time_tnow=time(0);returnctime(&now);}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,boost::asio::placeholders::bytes_transferred));}voidhandle_receive(constboost::system::error_code&error,std::size_t/*bytes_transferred*/){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,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));start_receive();}}voidhandle_send(boost::shared_ptr<std::string>/*message*/,constboost::system::error_code&/*error*/,std::size_t/*bytes_transferred*/){}udp::socketsocket_;udp::endpointremote_endpoint_;boost::array<char,1>recv_buffer_;};intmain(){try{boost::asio::io_serviceio_service;udp_serverserver(io_service);io_service.run();}catch(std::exception&e){std::cerr<<e.what()<<std::endl;}return0;}
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.