《C++Boost库asio》第六篇 同步time时间服务器
同步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;
} 使用代码专用标签 <> 将代码包裹起来,效果会更好哦~ 同步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;
}
// 同步time时间服务器;
// 一次只能连接一个客户端,处理一个客户端的事务
// 引入头文件建议分区块,可以先引入自己的文件,然后是第三方库,
// C++,C按照这种顺序,当然反过来也是可以的
// C语言的;
// #include <time.h>//原始C的方式
#include <ctime>//C++把C的方式改写了,增加了前面一个c字母,后面去掉了.h
//C++语言的;
#include <iostream>
#include <string>
//第三方库;
#include <boost/asio.hpp>
//自己的文件;
//#include "my.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()
{
// 我们的程序和操作系统底层之间的一个相互传递的枢纽
// 会把事件按照一定方式进行处理;
boost::asio::io_service io;
try
{
// 绑定端口,用1024以下的端口要以root权限运行,
// 建议不要绑定1024以下的端口,不安全
tcp::endpoint ep(tcp::v4(), 2001);
tcp::acceptor acc(io, ep);
for(;;)
{
// 在我们这个应用层是做不到组止某个IP(比如:10.34.32.*)不连接进来,因为只有连接成功后
// 才能知道它的IP,没法做到,这个功能要到外部工具去实现
tcp::socket socket(io);
//阻塞的,程序停在这,一次只能接收一个客户端的服务//3次握手
acc.accept(socket);
std::string 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;
}
std::cout << "mian finish run \n" << std::endl;// 提示下main函数已经结束了
system("pause");// 让VS控制台程序不会一闪而过;
return 0;
}
页:
[1]