boost 网络库使用 之同步
2013-10-09 11:51
274 查看
首先看一下boost 中的例子:
// // blocking_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/smart_ptr.hpp> #include <boost/asio.hpp> #include <boost/thread/thread.hpp> using boost::asio::ip::tcp; const int max_length = 1024; typedef boost::shared_ptr<tcp::socket> socket_ptr; void session(socket_ptr sock) { try { for (;;) //处理读写. { char data[max_length]; boost::system::error_code error; size_t length = sock->read_some(boost::asio::buffer(data), 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. boost::asio::write(*sock, boost::asio::buffer(data, length)); } } catch (std::exception& e) { std::cerr << "Exception in thread: " << e.what() << "\n"; } } void server(boost::asio::io_service& io_service, unsigned short port) { tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port)); for (;;) { socket_ptr sock(new tcp::socket(io_service)); a.accept(*sock); //这里等连接 boost::thread t(boost::bind(session, sock)); // 一个连接来了之后,创建一个线程来处理它. } } int main(int argc, char* argv[]) { try { if (argc != 2) { std::cerr << "Usage: blocking_tcp_echo_server <port>\n"; return 1; } boost::asio::io_service io_service; using namespace std; // For atoi. server(io_service, atoi(argv[1])); } catch (std::exception& e) { std::cerr << "Exception: " << e.what() << "\n"; } return 0; }
相关文章推荐
- 使用 tungsten-replicator4 实现 mysql -- > monogo 数据同步
- 使用NTP同步系统时间
- 针式PKM使用经验二:如何将数据同步到移动硬盘或U盘
- 在Spring上集成使用ehcache缓存框架以及实现集群缓存同步
- c#线程同步使用详解示例
- python多线程编程(3): 使用互斥锁同步线程
- 线程的同步之Synchronized的使用
- 使用Percona Toolkit解决Mysql主从不同步问题【备忘】
- Centos 7.3_1611使用chrony做时间同步
- rsync同步命令使用
- NSString类方法同步请求、使用NSData方法同步请求 下载图片、数据
- 使用rsync进行多服务器同步
- stm32使用超高精度的同步时钟的设计
- 使用Sqlserver事务发布实现数据同步
- 【TRIO-Basic从入门到精通教程六】3D仿真、同步控制的使用1
- 使用Sqlserver事务发布实现数据同步
- 使用jQuery的ajax实现同步获取返回值
- 理解Twisted的Deferred机制(二)使用inlineCallbacks实现类同步语法
- 使用Sqlserver事务发布实现数据同步
- PC和移动端浏览器同步测试工具Browsersync使用介绍