同步time时间服务器:
一次只能连接一个客户端,处理一个客户端的事务
例子:
// 引入头文件建议分区块,可以先引入自己的文件,然后是第三方库,C++,C按照这种顺序,当然反
过来也是可以的
// C语言的;
// #include <time.h>//原始C的方式
#include <ctime>//C++把C的方式改写了,增加了前面一个c字母,后面去掉了.h
//C++语言的;
#include <iostream>
#include <string>
//第三方库;
#include <boost/asio.hpp>
//自己的文件;
//#include "gameDefine.h"
using boost::asio::ip::tcp;
std::string make_daytime_string() {
using namespace std;//For time_t, time and ctime;
//time_t now = time(0);
auto now = time(nullptr);
return ctime(&now); // 返回const char*
}
int main() {
try {
boost::asio::io_service io_service;
// 绑定端口,用1024以下的端口要以root权限运行,建议不要绑定1024以下的端口,不安全
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13));
for(;;) {
//在我们这个应用层是做不到组止某个IP(比如:10.34.32.*)不连接进来,因为只有连接成功后
才能知道它的IP,没法做到,这个功能要到外部工具去实现
tcp::socket socket(io_service);
acceptor.accept(socket);//柱塞的,程序停在这,一次只能接收一个客户端的服务//3次握手
//std::string message = make_daytime_string();
auto message = make_daytime_string();
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer(message), ignored_error);//断开是4次握
手
//这里析构,断开连接,进入新的循环
}
} catch (std::exception &e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
|