鱼C论坛

 找回密码
 立即注册
查看: 3068|回复: 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

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-9 17:30:21 | 显示全部楼层
使用代码专用标签 <> 将代码包裹起来,效果会更好哦~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-10 07:22:06 | 显示全部楼层
  1. 同步time时间服务器:
  2. 一次只能连接一个客户端,处理一个客户端的事务

  3. 例子:
  4. // 引入头文件建议分区块,可以先引入自己的文件,然后是第三方库,C++,C按照这种顺序,当然反

  5. 过来也是可以的
  6. // C语言的;
  7. // #include <time.h>//原始C的方式
  8. #include <ctime>//C++把C的方式改写了,增加了前面一个c字母,后面去掉了.h
  9. //C++语言的;
  10. #include <iostream>
  11. #include <string>
  12. //第三方库;
  13. #include <boost/asio.hpp>
  14. //自己的文件;
  15. //#include "gameDefine.h"

  16. using boost::asio::ip::tcp;

  17. std::string make_daytime_string() {
  18. using namespace std;//For time_t, time and ctime;
  19. //time_t now = time(0);
  20. auto now = time(nullptr);
  21. return ctime(&now); // 返回const char*
  22. }

  23. int main() {
  24. try {
  25.   boost::asio::io_service io_service;
  26.   
  27.   // 绑定端口,用1024以下的端口要以root权限运行,建议不要绑定1024以下的端口,不安全
  28.   tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13));

  29.   for(;;) {
  30.    //在我们这个应用层是做不到组止某个IP(比如:10.34.32.*)不连接进来,因为只有连接成功后

  31. 才能知道它的IP,没法做到,这个功能要到外部工具去实现
  32.    tcp::socket socket(io_service);
  33.    acceptor.accept(socket);//柱塞的,程序停在这,一次只能接收一个客户端的服务//3次握手

  34.    //std::string message = make_daytime_string();
  35.    auto message = make_daytime_string();

  36.    boost::system::error_code ignored_error;
  37.    boost::asio::write(socket, boost::asio::buffer(message), ignored_error);//断开是4次握


  38. //这里析构,断开连接,进入新的循环
  39.   }
  40. } catch (std::exception &e) {
  41.   std::cerr << e.what() << std::endl;
  42. }
  43. return 0;
  44. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-11 10:57:01 | 显示全部楼层


  1. // 同步time时间服务器;
  2. // 一次只能连接一个客户端,处理一个客户端的事务
  3. // 引入头文件建议分区块,可以先引入自己的文件,然后是第三方库,
  4. // C++,C按照这种顺序,当然反过来也是可以的
  5. // C语言的;
  6. // #include <time.h>//原始C的方式
  7. #include <ctime>//C++把C的方式改写了,增加了前面一个c字母,后面去掉了.h
  8. //C++语言的;
  9. #include <iostream>
  10. #include <string>
  11. //第三方库;
  12. #include <boost/asio.hpp>
  13. //自己的文件;
  14. //#include "my.h"

  15. using boost::asio::ip::tcp;

  16. std::string make_daytime_string()
  17. {
  18.         using namespace std;//For time_t, time and ctime;
  19.                                                 //time_t now = time(0);
  20.         auto now = time(nullptr);
  21.         return ctime(&now); // 返回const char*
  22. }

  23. int main()
  24. {
  25.         // 我们的程序和操作系统底层之间的一个相互传递的枢纽
  26.         // 会把事件按照一定方式进行处理;
  27.         boost::asio::io_service io;
  28.        
  29.         try
  30.         {
  31.                 // 绑定端口,用1024以下的端口要以root权限运行,
  32.                 // 建议不要绑定1024以下的端口,不安全
  33.                 tcp::endpoint ep(tcp::v4(), 2001);
  34.                 tcp::acceptor acc(io, ep);

  35.                 for(;;)
  36.                 {
  37.                         // 在我们这个应用层是做不到组止某个IP(比如:10.34.32.*)不连接进来,因为只有连接成功后
  38.                         // 才能知道它的IP,没法做到,这个功能要到外部工具去实现
  39.                         tcp::socket socket(io);
  40.                         //阻塞的,程序停在这,一次只能接收一个客户端的服务//3次握手
  41.                         acc.accept(socket);

  42.                         std::string message = make_daytime_string();

  43.                         boost::system::error_code ignored_error;
  44.                         boost::asio::write(socket, boost::asio::buffer(message), ignored_error);
  45.                
  46.                         //断开是4次握手
  47.                         //这里析构,断开连接,进入新的循环
  48.                        
  49.                 }
  50.         }
  51.         catch (std::exception &e)
  52.         {
  53.                 std::cerr << e.what() << std::endl;
  54.         }
  55.        

  56.         std::cout << "mian finish run \n" << std::endl;// 提示下main函数已经结束了
  57.         system("pause");// 让VS控制台程序不会一闪而过;
  58.     return 0;
  59. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-21 01:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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