鱼C论坛

 找回密码
 立即注册
查看: 2934|回复: 3

[技术交流] 《C++Boost库asio》第六篇 同步time时间服务器

[复制链接]
发表于 2017-7-9 17:16:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

评分

参与人数 1鱼币 +2 收起 理由
小甲鱼 + 2

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-9 17:30:21 | 显示全部楼层
使用代码专用标签 <> 将代码包裹起来,效果会更好哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 17:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表