dnfpk001 发表于 2017-7-9 17:16:44

《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;
}

小甲鱼 发表于 2017-7-9 17:30:21

使用代码专用标签 <> 将代码包裹起来,效果会更好哦~

dnfpk001 发表于 2017-7-10 07:22:06

同步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;
}

dnfpk001 发表于 2017-7-11 10:57:01



// 同步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]
查看完整版本: 《C++Boost库asio》第六篇 同步time时间服务器