boost::asio 的daytime客户端和服务器实例
来源:互联网 发布:mac number 求和 编辑:程序博客网 时间:2024/05/17 07:09
1. 服务器端
server.h
#include <boost/asio.hpp>#include <boost/array.hpp>using boost::asio::ip::tcp;using namespace boost::asio;#include <memory>#include <utility>#include <vector>#include <ctime>#include <iostream>// A reference-counted non-modifiable buffer class.//buffer类,用来保存要发送的消息。class shared_const_buffer{public: // Construct from a std::string. explicit shared_const_buffer(const std::string& data) : data_(new std::vector<char>(data.begin(), data.end())), buffer_(boost::asio::buffer(*data_)) { } // Implement the ConstBufferSequence requirements. typedef boost::asio::const_buffer value_type; typedef const boost::asio::const_buffer* const_iterator; const boost::asio::const_buffer* begin() const { return &buffer_; } const boost::asio::const_buffer* end() const { return &buffer_ + 1; }private: std::shared_ptr<std::vector<char> > data_; boost::asio::const_buffer buffer_;};//处理socketclass Session:public std::enable_shared_from_this<Session>{public: Session(tcp::socket socket) : m_socket(std::move(socket)){} void start(){ std::cout << "connect" << std::endl; do_write(); //框架内部,可修改问其他服务器的功能。 }private: void do_write(){ std::time_t now = std::time(0); shared_const_buffer buffer(std::ctime(&now)); auto self(shared_from_this()); boost::asio::async_write(m_socket, buffer, [this, self](boost::system::error_code /*ec*/, std::size_t /*length*/) { }); }private: tcp::socket m_socket;};//服务器主程序,循环异步分发socket事件。class Server{public: Server(io_service &ios, short port) : m_acceptor(ios, tcp::endpoint(tcp::v4(), port)), m_socket(ios) { do_accept(); }private: void do_accept(){ m_acceptor.async_accept(m_socket, [this](boost::system::error_code ec){ if (!ec){ std::make_shared<Session>(std::move(m_socket))->start(); } do_accept(); //循环 }); }private: tcp::socket m_socket; tcp::acceptor m_acceptor;};
main.cpp
#include <boost/asio.hpp>using namespace boost::asio;#include "server.h"int main(){ io_service ios; int port = 6677; Server server(ios, port); ios.run(); return 0;}
2. 客户端
main.cpp
//stl#include <iostream>//boost#include <boost/asio.hpp>#include <boost/array.hpp>int main(int argc, char **argv){ boost::asio::io_service ios; boost::asio::ip::tcp::socket socket(ios); //连接 boost::asio::ip::tcp::resolver resolver(ios); auto endpoint_iterator = resolver.resolve({ "127.0.0.1", "6677" }); boost::asio::connect(socket, endpoint_iterator); for (;;){ boost::array<char, 128> buf; boost::system::error_code error; size_t len = socket.read_some(boost::asio::buffer(buf), error); //读取数据 if (error == boost::asio::error::eof) break; // Connection closed cleanly by peer. else if (error) throw boost::system::system_error(error); // Some other error. std::cout.write(buf.data(), len); }}
0 0
- boost::asio 的daytime客户端和服务器实例
- boost::asio编写的异步服务器和客户端
- boost asio的异步服务器
- boost asio 和socket 作服务器的区别
- daytime服务器与客户端(程序)
- boost::asio 实现的FTP客户端
- 基于boost::asio的客户端网络库
- 基于boost asio的redis客户端redisclient
- 异步客户端 boost asio
- 同步客户端 boost asio
- 异步客户端 boost asio
- boost asio异步读写网络聊天程序客户端 实例详解
- Boost::Asio一个简单的Echo服务器
- boost::asio一个简单的echo服务器
- Boost::Asio一个简单的Echo服务器
- Boost::Asio一个简单的Echo服务器
- boost::asio一个简单的echo服务器
- 基于boost.asio的ECHO服务器
- XMLHTTPRequest使用【学习笔记】
- 自定义Activity标题栏
- 京城游戏人-Day3:对摄像机/屏幕尺寸关系的理解(1)
- JavaEE学习笔记之SSH—Spring(3)
- 京城游戏人-Day4:Prefab 预制件用法(1)
- boost::asio 的daytime客户端和服务器实例
- C语言运算符优先级
- Crossing River
- 嵌入式linux从主机linux提供的nfs服务挂载根文件系统
- DOM4J XML解析
- hdu 4165 Pills
- 阿里云服务器 linux ngix php mysql 建站踩过的坑
- 3D拖拽相册
- [LeetCode] 18. 4Sum