boost 编写finger服务
来源:互联网 发布:手机视频拼接软件 编辑:程序博客网 时间:2024/06/01 17:16
本篇是模仿PYTHON TWISTED写一个FINGER示例。
从最简单的链接到通过接收字符串返回不同的内容
1 最简单的链接
1 #include <ctime> 2 #include <iostream> 3 #include <string> 4 #include <boost/bind.hpp> 5 #include <boost/shared_ptr.hpp> 6 #include <boost/enable_shared_from_this.hpp> 7 #include <boost/asio.hpp> 8 9 10 using boost::asio::ip::tcp;11 12 13 int main()14 {15 try{16 boost::asio::io_service io_service;17 io_service.run();18 }19 catch (std::exception& e) {20 std::cerr << e.what() << std::endl;21 }22 23 std::cout << "finished!" << std::endl;24 return 0;25 }
运行显示如下
finished!
请按任意键继续. . .
2 接收ACCEPT请求 然后丢弃
#include <ctime>#include <iostream>#include <string>#include <boost/bind.hpp>#include <boost/shared_ptr.hpp>#include <boost/enable_shared_from_this.hpp>#include <boost/asio.hpp>using boost::asio::ip::tcp;static USHORT defaultPort = 1123;class tcp_server {public: tcp_server(boost::asio::io_service& io_service) : io_service_(io_service), acceptor_(io_service, tcp::endpoint(tcp::v4(), defaultPort)) { start_accept(); }private: void start_accept() { boost::shared_ptr<tcp::socket> new_connection(new tcp::socket(io_service_)); acceptor_.async_accept(*new_connection,boost::bind(&tcp_server::handle_accept,this, new_connection,boost::asio::placeholders::error)); } void handle_accept(boost::shared_ptr<tcp::socket> new_connection, const boost::system::error_code error) { if (!error) { std::cout << "recv a connection!" << std::endl; new_connection->shutdown(boost::asio::socket_base::shutdown_type::shutdown_both); } start_accept(); } boost::asio::io_service& io_service_; tcp::acceptor acceptor_;};int main(){ try { boost::asio::io_service io_service; tcp_server server(io_service); io_service.run(); } catch (std::exception& e) { std::cerr << e.what() << std::endl; } std::cout << "finished!" << std::endl; return 0;}
运行显示如下:
recv a connection!
客户端运行 显示
telnet 127.0.0.1 1123
3 接收连接发送过来的内容 显示 然后关闭
#include <ctime>#include <iostream>#include <string>#include <boost/bind.hpp>#include <boost/shared_ptr.hpp>#include <boost/enable_shared_from_this.hpp>#include <boost/asio.hpp>using boost::asio::ip::tcp;static USHORT defaultPort = 1123;class tcp_connection :public boost::enable_shared_from_this<tcp_connection>{public: typedef boost::shared_ptr<tcp_connection> pointer; static pointer create(boost::asio::io_service& io_service) { return pointer(new tcp_connection(io_service)); } tcp::socket& socket() { return socket_; } void start() { boost::asio::async_read_until(socket_, input_buffer_, '\n', boost::bind(&tcp_connection::handle_read, shared_from_this(), _1)); }private: void handle_read(const boost::system::error_code& err) { if (!err) { std::string line; std::istream is(&input_buffer_); std::getline(is,line); if (!line.empty()) { std::cout << "Received: " << line << "\n"; } socket_.shutdown(boost::asio::socket_base::shutdown_both); } } tcp_connection(boost::asio::io_service& io_service) :socket_(io_service) {} boost::asio::streambuf input_buffer_; tcp::socket socket_; std::string message_;};class tcp_server {public: tcp_server(boost::asio::io_service& io_service) : io_service_(io_service), acceptor_(io_service, tcp::endpoint(tcp::v4(), defaultPort)) { start_accept(); }private: void start_accept() { tcp_connection::pointer new_connection = tcp_connection::create(acceptor_.get_io_service()); acceptor_.async_accept(new_connection->socket(), boost::bind(&tcp_server::handle_accept, this, new_connection, boost::asio::placeholders::error)); std::cout << "new a connection" << std::endl; } void handle_accept(tcp_connection::pointer new_connection, const boost::system::error_code& error) { if (!error) { new_connection->start(); } start_accept(); } boost::asio::io_service& io_service_; tcp::acceptor acceptor_;};int main(){ try { boost::asio::io_service io_service; tcp_server server(io_service); io_service.run(); } catch (std::exception& e) { std::cerr << e.what() << std::endl; } std::cout << "finished!" << std::endl; return 0;}
运行并TELNET连接后显示如下
new a connection
new a connection
Received: sadasd
4 接收连接发送内容 并返回指定内容
#include <ctime>#include <iostream>#include <string>#include <boost/bind.hpp>#include <boost/shared_ptr.hpp>#include <boost/enable_shared_from_this.hpp>#include <boost/asio.hpp>using boost::asio::ip::tcp;static USHORT defaultPort = 1123;class tcp_connection :public boost::enable_shared_from_this<tcp_connection>{public: typedef boost::shared_ptr<tcp_connection> pointer; static pointer create(boost::asio::io_service& io_service) { return pointer(new tcp_connection(io_service)); } tcp::socket& socket() { return socket_; } void start() { boost::asio::async_read_until(socket_, input_buffer_, '\n', boost::bind(&tcp_connection::handle_read, shared_from_this(), _1)); }private: void handle_read(const boost::system::error_code& err) { if (!err) { std::string line; std::istream is(&input_buffer_); std::getline(is, line); if (!line.empty()) { std::cout << line << "\n"; } boost::asio::async_write(socket_, boost::asio::buffer("no this user", strlen("no this user")+1), boost::bind(&tcp_connection::handle_write, shared_from_this(), boost::asio::placeholders::error)); } } void handle_write(const boost::system::error_code& error) { if (!error) { socket_.shutdown(boost::asio::socket_base::shutdown_both); } } tcp_connection(boost::asio::io_service& io_service) :socket_(io_service) {} boost::asio::streambuf input_buffer_; tcp::socket socket_; std::string message_;};class tcp_server {public: tcp_server(boost::asio::io_service& io_service) : io_service_(io_service), acceptor_(io_service, tcp::endpoint(tcp::v4(), defaultPort)) { start_accept(); }private: void start_accept() { tcp_connection::pointer new_connection = tcp_connection::create(acceptor_.get_io_service()); acceptor_.async_accept(new_connection->socket(), boost::bind(&tcp_server::handle_accept, this, new_connection, boost::asio::placeholders::error)); std::cout << "new a connection" << std::endl; } void handle_accept(tcp_connection::pointer new_connection, const boost::system::error_code& error) { if (!error) { new_connection->start(); } start_accept(); } boost::asio::io_service& io_service_; tcp::acceptor acceptor_;};int main(){ try { boost::asio::io_service io_service; tcp_server server(io_service); io_service.run(); } catch (std::exception& e) { std::cerr << e.what() << std::endl; } std::cout << "finished!" << std::endl; return 0;}
运行后显示如下
new a connection
new a connection
asdas
telnet客户端显示
no this user
遗失对主机的连接。
5 接收发送的内容 并在记录中查找是否有该内容的记录
#include <ctime>#include <iostream>#include <string>#include <boost/bind.hpp>#include <boost/shared_ptr.hpp>#include <boost/enable_shared_from_this.hpp>#include <boost/asio.hpp>#include <map>using boost::asio::ip::tcp;static USHORT defaultPort = 1123;typedef std::map<std::string, std::string> UserMap;UserMap users;class tcp_connection :public boost::enable_shared_from_this<tcp_connection>{public: typedef boost::shared_ptr<tcp_connection> pointer; static pointer create(boost::asio::io_service& io_service) { return pointer(new tcp_connection(io_service)); } tcp::socket& socket() { return socket_; } void start() { boost::asio::async_read_until(socket_, input_buffer_, '\n', boost::bind(&tcp_connection::handle_read, shared_from_this(), _1)); }private: void handle_read(const boost::system::error_code& err) { if (!err) { std::istream is(&input_buffer_); is >> line_; if (!line_.empty()) { std::cout << line_ << "\n"; UserMap::iterator it = users.find(line_); if (it != users.end()) { line_ = it->second; } else { line_ = "no this user"; } } else { line_ = "string error!"; } boost::asio::async_write(socket_, boost::asio::buffer(line_, line_.size()), boost::bind(&tcp_connection::handle_write, shared_from_this(), boost::asio::placeholders::error)); } } void handle_write(const boost::system::error_code& error) { if (!error) { socket_.shutdown(boost::asio::socket_base::shutdown_both); } } tcp_connection(boost::asio::io_service& io_service) :socket_(io_service) {} std::string line_; boost::asio::streambuf input_buffer_; tcp::socket socket_; std::string message_;};class tcp_server {public: tcp_server(boost::asio::io_service& io_service) : io_service_(io_service), acceptor_(io_service, tcp::endpoint(tcp::v4(), defaultPort)) { start_accept(); }private: void start_accept() { tcp_connection::pointer new_connection = tcp_connection::create(acceptor_.get_io_service()); acceptor_.async_accept(new_connection->socket(), boost::bind(&tcp_server::handle_accept, this, new_connection, boost::asio::placeholders::error)); std::cout << "new a connection" << std::endl; } void handle_accept(tcp_connection::pointer new_connection, const boost::system::error_code& error) { if (!error) { new_connection->start(); } start_accept(); } boost::asio::io_service& io_service_; tcp::acceptor acceptor_;};int main(){ try { users["DEF"] = "PASS"; boost::asio::io_service io_service; tcp_server server(io_service); io_service.run(); } catch (std::exception& e) { std::cerr << e.what() << std::endl; } std::cout << "finished!" << std::endl; return 0;}
运行后显示如下
new a connection
new a connection
dda
new a connection
DEF
telnet客户端显示
PASS
遗失对主机的连接。
以上代码所有连接 均以telnet作为客户端
telnet 127.0.0.1 1123
正在连接127.0.0.1...
技术博客 http://blog.csdn.net/stecdeng 技术交流群 群号码:324164944 欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
0 0
- boost 编写finger服务
- muduo实现finger服务
- finger
- boost程序编写步骤
- linux-finger
- finger effect
- finger 指令
- Finger类(Leap::Finger)
- [Boost.Asio] 使用Boost.Asio编写通信程序
- 编写 Window 服务程序
- 编写后台服务程序
- 编写 REST 服务
- c# 编写windows服务
- svchost服务的编写
- 编写服务程序步骤
- 编写“Windows服务”
- 编写服务程序步骤
- 服务程序编写
- JAVASE--03--继承
- 数据库中表和视图的区别和联系
- 彻底弄懂JS的事件冒泡和事件捕获
- Unityeditor 事件(2)
- Django模板实现树状数据渲染
- boost 编写finger服务
- Java中的final关键字
- 图像处理算法(三)---图像常用操作
- mysql读写分离总结
- Spring中使用JdbcTemplate操作数据库
- Ubuntu下利用pip配置xgboost
- const理解
- c++第二次试验-本月有几天
- HihoCoder 状态压缩一