boost::asio学习之[四]udp client server 异步server
来源:互联网 发布:js select改变事件 编辑:程序博客网 时间:2024/05/22 07:48
#pragma once#include<boost/array.hpp>#include<boost/system/system_error.hpp>#include <boost/asio.hpp>namespace UdpSyClient{using namespace boost::asio::ip;const int MaxSize = 1024;void udp_sy_client(){try{boost::asio::io_service io; udp::resolver resolver(io); udp::resolver::query query(udp::v4(), "localhost", "6677");//protocol type , ip , portudp::endpoint resolver_endpoint = *resolver.resolve(query); udp::socket socket(io);socket.open(udp::v4());boost::array<char, 1> buf = {{0}};socket.send_to(boost::asio::buffer(buf), resolver_endpoint);boost::array<char, MaxSize> recive_buf;udp::endpoint send_endpoint;size_t len = socket.receive_from(boost::asio::buffer(recive_buf), send_endpoint);std::cout.write(recive_buf.data(), len);}catch (std::exception& e){std::cout << e.what() << std::endl;}}}#pragma once#include <ctime>#include <boost/array.hpp>#include <boost/asio.hpp>namespace UdpSyService{using namespace boost::asio::ip;void udp_sy_server(){try{boost::asio::io_service io;udp::socket socket(io, udp::endpoint(udp::v4(), 6677));for (;;){boost::array<char, 1> rec_buf;boost::system::error_code error;udp::endpoint remote_endpoint;socket.receive_from(boost::asio::buffer(rec_buf), remote_endpoint, 0, error);//if (error && error != boost::asio::error::message_size)throw boost::system::system_error(error);time_t now = std::time(0);std::string message = std::ctime(&now);boost::system::error_code ignore_error;socket.send_to(boost::asio::buffer(message), remote_endpoint, 0, ignore_error);}}catch (std::exception& e){std::cerr << e.what() << std::endl;}}}#pragma once#include <ctime>#include <boost/array.hpp>#include <boost/asio.hpp>namespace UdpAsyService{using namespace boost::asio::ip;class udp_server{public:udp_server(boost::asio::io_service& io):socket_(io, udp::endpoint(udp::v4(), 6677))//tcp::acceport的构造一样{start_recive();}//async_receive_from 函数在后台监听是否有新的请求,当一个请求链接到达时,io_service对象将唤起hand_recive//函数来做相应的处理。hand_recive有两个参数,error参数指示操作是成功还是失败,size参数指示实际接受的字节数。void start_recive(){socket_.async_receive_from(boost::asio::buffer(rec_buf_), remot_endpoint_,boost::bind(&udp_server::hand_receive, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));}private:void hand_receive(const boost::system::error_code& error, std::size_t size){if (!error || error != boost::asio::error::message_size){time_t now = std::time(0);boost::shared_ptr<std::string> message(new std::string(std::ctime(&now)));socket_.async_send_to(boost::asio::buffer(*message), remot_endpoint_,boost::bind(&udp_server::hand_send, this, message, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));start_recive();//next client;}}void hand_send(boost::shared_ptr<std::string> message, const boost::system::system_error& error, std::size_t size){}private:udp::socket socket_;udp::endpoint remot_endpoint_;boost::array<char, 1> rec_buf_;};void udp_asy_server(){try{boost::asio::io_service io;udp_server server(io);io.run();}catch (std::exception& e){std::cerr << e.what() << std::endl;}}}
0 0
- boost::asio学习之[四]udp client server 异步server
- Boost Asio multi-threaded blocking server/client
- 深入Boost.asio的异步Tcp通信的server、client,可用来当程序骨架。
- boost::asio学习笔记 server端
- boost::asio学习 - HTTP Server性能测试报告
- boost::asio学习 - HTTP Server性能测试报告
- boost::asio学习 - HTTP Server性能测试报告
- boost::asio学习 - HTTP Server性能测试报告
- Boost-asio之四
- boost::asio学习之[三]同步service,client
- boost::asio server编程实例
- 1Boost之TCP,Client and Server
- 2Boost之UPD,Client and Server
- boost::asio学习 异步方式
- boost daytime client/server
- boost.asio之异步编程
- boost::asio学习之[五]运行udp tcp服务
- Python UDP Server Client
- 关于 win8.1 激活问题
- Android WebView自定义处理错误页面显示(404等)
- NGUI 基础 -- 功能组件
- 网络负载均衡
- 学习笔记_oracle——安装
- boost::asio学习之[四]udp client server 异步server
- 2014 编程之美 资格赛 第一题 同构
- 过滤器、监听器、拦截器的区别
- 2003+IIS6.0+PHP5.2.5
- 学习笔记_oracle——基础操作
- 在Android中查看和管理sqlite数据库
- javascript基础学习-语法学习(三)
- 启动Android模拟器报 PANIC: Could not open:xxxx 问题解决
- 内部Handler类引起内存泄露