boost::asio网络库编译
安装教程
使用
server
#include <boost/system/error_code.hpp>
#include <iostream>
#include <boost/asio.hpp>
#include <chrono>
#include <ctime>
#include <string>
#include <ratio>
#include <iomanip>
#include <sstream>
std::string make_daytime_string(){
std::stringstream ss;
ss <<"server time : ";
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t just = std::chrono::system_clock::to_time_t(now);
ss <<std::put_time(std::localtime(&just),"%F %T");
return ss.str();
}
int main(){
#ifdef XXX
std::chrono::milliseconds ms{3};
std::chrono::microseconds us = 2*ms;
std::chrono::duration<double,std::ratio<1,1000*1000>> hz30{3};
std::cout <<"3 ms duratioj has "<<ms.count()<<"\n6000 us duration has "<<us.count()<<"\n3.5 hz duration has "<<hz30.count()<< std::endl;
std::chrono::minutes t1 {10};
std::chrono::seconds t2 {60};
std::chrono::seconds t3 = t2 - t1;
std::cout <<t3.count()<<" seconds"<<std::endl;
using days_type = std::chrono::duration<int,std::ratio<60*60*24>>;
std::chrono::time_point<std::chrono::system_clock,days_type> today = std::chrono::time_point_cast<days_type>(std::chrono::system_clock::now());
std::cout <<today.time_since_epoch().count()<<" days since epcoh"<< std::endl;
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t last = std::chrono::system_clock::to_time_t(now - std::chrono::hours(24));
std::time_t just = std::chrono::system_clock::to_time_t(now);
std::time_t next = std::chrono::system_clock::to_time_t(now + std::chrono::hours(24));
std::cout <<"one day ago,the time was "<<std::put_time(std::localtime(&last),"%F %T")<< std::endl;
std::cout <<"just now,the time is "<<std::put_time(std::localtime(&just),"%F %T")<< std::endl;
std::cout <<"tommorw,the time is "<<std::put_time(std::localtime(&next),"%F %T")<< std::endl;
std::cout <<make_daytime_string()<< std::endl;
#endif
try{
boost::asio::io_context io_context;
boost::asio::ip::tcp::acceptor acceptor(io_context,boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),6768));
for(int i = 1; i < 10000; i++){
std::cout <<"run time "<<i<<" second"<< std::endl;
boost::asio::ip::tcp::socket socket(io_context);
acceptor.accept(socket);
std::string message = make_daytime_string();
boost::system::error_code ignored_error;
boost::asio::write(socket,boost::asio::buffer(message),ignored_error);
}
}catch(std::exception &e){
std::cerr <<e.what()<< std::endl;
}
}
client
#include <iostream>
#include <boost/array.hpp>
#include <boost/asio.hpp>
#include <boost/system/error_code.hpp>
int main(int argc,char *argv[]){
try{
if(argc != 2){
std::cerr <<"usage: client <host>"<< std::endl;
return 0;
}
boost::asio::io_context io_context;
boost::asio::ip::tcp::resolver resolver(io_context);
auto endpoints = resolver.resolve(argv[1],"6768");
boost::asio::ip::tcp::socket socket(io_context);
boost::asio::connect(socket,endpoints);
for(int i = 1; i < 10000; i++){
std::cout <<i<< std::endl;
boost::array<char,128> buff;
boost::system::error_code error;
std::size_t len = socket.read_some(boost::asio::buffer(buff),error);
if(error == boost::asio::error::eof){
std::cout <<"close by server..."<< std::endl;
break;
}
else if(error){
throw boost::system::system_error(error);
std::cout <<"ERROR..."<< std::endl;
}
std::cout.write(buff.data(),len);
}
}catch(std::exception &e){
std::cerr <<e.what()<< std::endl;
}
}
编译命令
g++ boost_server.cpp -lboost_system -lboost_thread -lpthread -o server