zoukankan      html  css  js  c++  java
  • boost::asio::tcp 同步

    //服务端
    #include <cstdio>
    #include
    <iostream> #include <sstream> #include <boost/asio.hpp> #include <boost/bind.hpp> #include <boost/thread/thread.hpp> using namespace boost::asio; typedef boost::shared_ptr<ip::tcp::socket> socket_Ptr; void cilent_session(socket_Ptr socket); int main() { //必须定义一个io_service实例,使用io_service与系统的输入输出进行交互 io_service service; //TCP端点的类型, 监听端口 ip::tcp::endpoint ep(ip::tcp::v4(), 7200); //TCP接受器类型 ip::tcp::acceptor accept(service, ep); while (true) { //定义客户端的套接字 socket_Ptr cli_socket(new ip::tcp::socket(service)); //阻塞,等待客户端连接 accept.accept(*cli_socket); // 打印与本机服务器取得连接的客户端IP地址 std::cout << "client IP: " << cli_socket->remote_endpoint().address() << std::endl; //一个连接,一个线程,在线程中操作读写socket。 boost::thread(boost::bind(cilent_session, cli_socket)); } return 0; } void cilent_session(socket_Ptr socket) { while (true) { char data[1024]; //客户端主动断开,程序会抛异常,必须要抓取异常,不然程序挂掉。 try { //阻塞读取 size_t len = socket->read_some(buffer(data));
           if (0 == len) { std::cout << "客户端断开" << std::endl; return; } if (len > 0) { len = write(*socket, buffer("ok", 2)); if (len <= 0) { std::cout << "发送异常 断开连接" << std::endl; return; } } } catch (boost::system::system_error e) { std::cout << "抛出异常 :" << e.code() << std::endl; return; } } }
    //客户端
    #include <cstdio> #include <iostream> #include <sstream> #include <boost/asio.hpp> #include <boost/bind.hpp> #include <boost/thread/thread.hpp> using namespace boost::asio; typedef boost::shared_ptr<ip::tcp::socket> socket_Ptr; void cilent_session(socket_Ptr socket); int main() { //必须定义一个io_service实例,使用io_service与系统的输入输出进行交互 io_service service; ip::tcp::endpoint ep(ip::address::from_string("192.168.56.1"), 7200); //定义套接字 socket_Ptr socketPtr(new ip::tcp::socket(service)); //错误码 boost::system::error_code ec; // 连接服务器 socketPtr->connect(ep, ec); if (ec) { std::cout << boost::system::system_error(ec).what() << std::endl; return -1; } std::cout << "connect ..." << std::endl; //连接上服务,在线程中操作读写socket。 boost::thread(boost::bind(cilent_session, socketPtr)); while (true) { sleep(1000); } return 0; } void cilent_session(socket_Ptr socket) { while (true) { char data[1024] = { '' }; //客户端主动断开,程序会抛异常,必须要抓取异常,不然程序挂掉。 try { //阻塞读取 size_t len = socket->read_some(buffer(data)); std::cout << "recv len = " << len << std::endl; if (0 == len) { std::cout << "服务端断开" << std::endl; return; } if (len > 0) { len = write(*socket, buffer("ok", 2)); if (len <= 0) { std::cout << "发送异常 断开连接" << std::endl; return; } } } catch (boost::system::system_error e) { std::cout << "抛出异常 :" << e.code() << std::endl; return; } } }
  • 相关阅读:
    Atitit.js图表控件总结
    atitit.attilax的软件 架构 理念.docx
    Atitit.异常处理 嵌套  冗长的解决方案
    Atitit.异常处理 嵌套  冗长的解决方案
    Atitit.atiagent  agent分销系统 代理系统 设计文档
    Atitit.atiagent  agent分销系统 代理系统 设计文档
    Atitit ati licenseService    设计原理
    Atitit ati licenseService    设计原理
    Atitit.项目修改补丁打包工具 使用说明
    Atitit.项目修改补丁打包工具 使用说明
  • 原文地址:https://www.cnblogs.com/osbreak/p/14560930.html
Copyright © 2011-2022 走看看