自己翻译的 没有任何参考价值
Daytime.2 - A synchronous TCP daytime server
https://www.boost.org/doc/libs/1_74_0/doc/html/boost_asio/tutorial/tutdaytime2.html
Daytime.2 - A synchronous TCP daytime server
本篇教程将演示如何使用asio来实现一个基于TCP的服务端应用程序.
#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
我们定义了一个函数make_daytime_string(),用它来生成给客户端的字符串.我们将会在以后的服务器端程序上反复用到它.
std::string make_daytime_string()
{
using namespace std; // 用到 time_t, time 和 ctime;
time_t now = time(0);
return ctime(&now);
}
int main()
{
try
{
boost::asio::io_context io_context;
创建一个ip::tcp::acceptor对象来监听新连接.将它初始化为TCP, 端口13, IPv4.
tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 13));
这次我们先写一个iterative(迭代的; 重复的; 反复的)服务端, 也就是说它同一时刻只能处理一个连接.新建一个socket对象,代表我们与客户端的连接,然后等待连接.
for( ;; )
{
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;
}
return 0;
}
整体代码
#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
std::string make_daytime_string()
{
using namespace std; // for time_t, time and ctime;
time_t now = time(0);
return ctime(&now);
}
int main()
{
try
{
boost::asio::io_context io_context;
tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 13));
for ( ;; )
{
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;
}
return 0;
}