Boost中Echo的tcp例程
来源:互联网 发布:比特彗星监听端口阻塞 编辑:程序博客网 时间:2024/05/29 12:05
Boost中Echo的TCP的Server版本
//// async_tcp_echo_server.cpp// ~~~~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//#include <cstdlib>#include <iostream>#include <boost/bind.hpp>#include <boost/asio.hpp>using boost::asio::ip::tcp;class session{public: session(boost::asio::io_service& io_service) : socket_(io_service) { } tcp::socket& socket() { return socket_; } void start() { socket_.async_read_some(boost::asio::buffer(data_, max_length), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); }private: void handle_read(const boost::system::error_code& error, size_t bytes_transferred) { if (!error) { boost::asio::async_write(socket_, boost::asio::buffer(data_, bytes_transferred), boost::bind(&session::handle_write, this, boost::asio::placeholders::error)); } else { delete this; } } void handle_write(const boost::system::error_code& error) { if (!error) { socket_.async_read_some(boost::asio::buffer(data_, max_length), boost::bind(&session::handle_read, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else { delete this; } } tcp::socket socket_; enum { max_length = 1024 }; char data_[max_length];};class server{public: server(boost::asio::io_service& io_service, short port) : io_service_(io_service), acceptor_(io_service, tcp::endpoint(tcp::v4(), port)) { start_accept(); }private: void start_accept() { session* new_session = new session(io_service_); acceptor_.async_accept(new_session->socket(), boost::bind(&server::handle_accept, this, new_session, boost::asio::placeholders::error)); } void handle_accept(session* new_session, const boost::system::error_code& error) { if (!error) { new_session->start(); } else { delete new_session; } start_accept(); } boost::asio::io_service& io_service_; tcp::acceptor acceptor_;};int main(int argc, char* argv[]){ try { if (argc != 2) { std::cerr << "Usage: async_tcp_echo_server <port>\n"; return 1; } boost::asio::io_service io_service; using namespace std; // For atoi. server s(io_service, atoi(argv[1])); io_service.run(); } catch (std::exception& e) { std::cerr << "Exception: " << e.what() << "\n"; } return 0;}
Boost中ECHO的Client
//// blocking_tcp_echo_client.cpp// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//#include <cstdlib>#include <cstring>#include <iostream>#include <boost/asio.hpp>using boost::asio::ip::tcp;enum { max_length = 1024 };int main(int argc, char* argv[]){ try { if (argc != 3) { std::cerr << "Usage: blocking_tcp_echo_client <host> <port>\n"; return 1; } boost::asio::io_service io_service; tcp::resolver resolver(io_service); tcp::resolver::query query(tcp::v4(), argv[1], argv[2]); tcp::resolver::iterator iterator = resolver.resolve(query); tcp::socket s(io_service); boost::asio::connect(s, iterator); using namespace std; // For strlen. std::cout << "Enter message: "; char request[max_length]; std::cin.getline(request, max_length); size_t request_length = strlen(request); boost::asio::write(s, boost::asio::buffer(request, request_length)); char reply[max_length]; size_t reply_length = boost::asio::read(s, boost::asio::buffer(reply, request_length)); std::cout << "Reply is: "; std::cout.write(reply, reply_length); std::cout << "\n"; } catch (std::exception& e) { std::cerr << "Exception: " << e.what() << "\n"; } return 0;}
简单封装下发送和接收:
void session::READ(char* buf,unsigned int ByteNum){memset(data_,0,max_length);memcpy(data_,buf,Length);socket_.async_read_some(boost::asio::buffer(data_,Length), boost::bind(&session::handle_read, this,boost::asio::placeholders::error,boost::asio::placeholders::bytes_transferred));}void session::WRITE(char *buf,unsigned int ByteNum){memset(data_,0,max_length);memcpy(data_,buf,Length); boost::asio::async_write(socket_, boost::asio::buffer(data_, Length), boost::bind(&session::handle_write, this, boost::asio::placeholders::error));}
- Boost中Echo的tcp例程
- boost中asio的tcp::iostream例子
- tcp udp 的echo脚本
- 基于TCP的ECHO程序
- Boost::Asio一个简单的Echo服务器
- boost::asio一个简单的echo服务器
- Boost::Asio一个简单的Echo服务器
- Boost::Asio一个简单的Echo服务器
- boost::asio一个简单的echo服务器
- 基于boost.asio的ECHO服务器
- 基于boost.asio的echo服务器2
- 基于boost.asio的echo服务器3
- boost仅运行一次的例程
- Makefile 中 echo 和@echo的区别
- boost中TCP的客户端发送示例(blocking版)
- windows下的TCP并发ECHO服务器
- Linux select实现的TCP echo
- 各种语言写的 tcp echo server
- 阿牛的EOF牛肉串
- I2C时序
- wifi基础知识
- vim基础配置及常用插件配置
- 802.11协议中帧控制域中To DS and From DS 比特位的含义
- Boost中Echo的tcp例程
- uva 301 Transportation (DFS)
- 如何在iPhone OS下创建、删除、读取、写入文件
- 陈列知识
- OJ 系统 C++ 与 G++ 提交时。。。
- java反射机制---Class.forName("")
- IOS开发之Appdelegate委托
- 最小公倍数和最大公约数
- mac 下myeclipse 安装及其破解