Boost TCP server&client 有回调无发送

举报
风吹稻花香 发表于 2021/06/04 23:01:58 2021/06/04
【摘要】 原文:https://www.cnblogs.com/jiayayao/p/6262771.html 使用Boost asio实现异步的TCP/IP通信 2017-01-08 21:23 by jiayayao, 3163 阅读, 1 评论, 收藏, 编辑   可以先了解一下Boost asio基本概念,...

原文:https://www.cnblogs.com/jiayayao/p/6262771.html

使用Boost asio实现异步的TCP/IP通信

2017-01-08 21:23 by jiayayao, 3163 阅读, 1 评论, 收藏编辑

  可以先了解一下Boost asio基本概念,以下是Boost asio实现的异步TCP/IP通信:

  服务器:

复制代码
#include "stdafx.h"
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/asio.hpp>
#include <boost/asio/placeholders.hpp>
#include <boost/system/error_code.hpp>
#include <boost/bind/bind.hpp>

using namespace boost::asio;
using namespace std;

class server
{ typedef server this_type; typedef ip::tcp::acceptor acceptor_type; typedef ip::tcp::endpoint endpoint_type; typedef ip::tcp::socket socket_type; typedef ip::address address_type; typedef boost::shared_ptr<socket_type> sock_ptr;

private: io_service m_io; acceptor_type m_acceptor;

public: server() : m_acceptor(m_io, endpoint_type(ip::tcp::v4(), 6688)) { accept(); } void run(){ m_io.run();} void accept() { sock_ptr sock(new socket_type(m_io)); m_acceptor.async_accept(*sock, boost::bind(&this_type::accept_handler, this, boost::asio::placeholders::error, sock)); } void accept_handler(const boost::system::error_code& ec, sock_ptr sock) { if (ec) { return; } cout<<"Client:"; cout<<sock->remote_endpoint().address()<<endl; sock->async_write_some(buffer("hello asio"), boost::bind(&this_type::write_handler, this, boost::asio::placeholders::error)); // 发送完毕后继续监听,否则io_service将认为没有事件处理而结束运行
 accept(); } void write_handler(const boost::system::error_code&ec) { cout<<"send msg complete"<<endl; }
};

int main()
{ try { cout<<"Server start."<<endl; server srv; srv.run(); } catch (std::exception &e) { cout<<e.what()<<endl; } return 0;
}
复制代码

  客户端:

复制代码
#include "stdafx.h"
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/asio.hpp>
#include <boost/asio/placeholders.hpp>
#include <boost/system/error_code.hpp>
#include <boost/bind/bind.hpp>

using namespace boost::asio;
using namespace std;

class client
{ typedef client this_type; typedef ip::tcp::acceptor acceptor_type; typedef ip::tcp::endpoint endpoint_type; typedef ip::tcp::socket socket_type; typedef ip::address address_type; typedef boost::shared_ptr<socket_type> sock_ptr; typedef vector<char> buffer_type;

private: io_service m_io; buffer_type m_buf; endpoint_type m_ep;
public: client(): m_buf(100, 0), m_ep(address_type::from_string("127.0.0.1"), 6688) { start(); } void run() { m_io.run();} void start() { sock_ptr sock(new socket_type(m_io)); sock->async_connect(m_ep, boost::bind(&this_type::conn_handler, this, boost::asio::placeholders::error, sock)); } void conn_handler(const boost::system::error_code&ec, sock_ptr sock) { if (ec) {return;} cout<<"Receive from "<<sock->remote_endpoint().address()<<": "<<endl; sock->async_read_some(buffer(m_buf), boost::bind(&client::read_handler, this, boost::asio::placeholders::error, sock)); } void read_handler(const boost::system::error_code&ec, sock_ptr sock) { if (ec) {return;} sock->async_read_some(buffer(m_buf), boost::bind(&client::read_handler, this, boost::asio::placeholders::error, sock)); cout<<&m_buf[0]<<endl; }
};

int main()
{ try { cout<<"Client start."<<endl; client cl; cl.run(); } catch (std::exception &e) { cout<<e.what()<<endl; } return 0;
}

文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/79339529

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。