服务器端:

#include <boost/thread.hpp>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp> class Server
{
private:
boost::asio::io_service &ios;
boost::asio::ip::tcp::acceptor acceptor;
typedef boost::shared_ptr<boost::asio::ip::tcp::socket> sock_pt;
public:
Server(boost::asio::io_service &io) : ios(io),
acceptor(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 6688))
{
start();
} void start()
{
sock_pt sock(new boost::asio::ip::tcp::socket(ios)); // 智能指针
acceptor.async_accept(*sock,
boost::bind(&Server::accept_handler, this, _1, sock)); // 异步监听服务
} void accept_handler(const boost::system::error_code &e, sock_pt sock)
{
if (e) // 检测错误码
{
return;
}
std::cout << "client: ";
std::cout << sock->remote_endpoint().address() << std::endl;
sock->async_write_some(boost::asio::buffer("hello client..."),
boost::bind(&Server::write_hander, this, _1));
start(); // 再次启动异步监听
} void write_hander(const boost::system::error_code &e)
{
std::cout << "send message complete." << std::endl;
}
};
int main()
{
try
{
std::cout << "server start..." << std::endl;
boost::asio::io_service ios;
Server server(ios);
ios.run(); // 启动异步调用事件处理循环
}
catch (std::exception &e)
{
std::cout << e.what() << std::endl;
}
return 0;
}

  

客户端:

#include <boost/thread.hpp>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <vector> class Client
{
private:
boost::asio::io_service &ios;
boost::asio::ip::tcp::endpoint ep;
typedef boost::shared_ptr<boost::asio::ip::tcp::socket> sock_pt;
public:
Client(boost::asio::io_service &io) :ios(io),
ep(boost::asio::ip::address::from_string("127.0.0.1"), 6688)
{
start(); // 启动异步连接
}
void start()
{
sock_pt sock(new boost::asio::ip::tcp::socket(ios));
sock->async_connect(ep, boost::bind(&Client::conn_hander, this, _1, sock)); // 异步连接
}
void conn_hander(const boost::system::error_code &e, sock_pt sock)
{
if (e)
{
return;
}
std::cout << "recive from " << sock->remote_endpoint().address() << ": ";
boost::shared_ptr<std::vector<char> > str(new std::vector<char>(100, 0));
sock->async_read_some(boost::asio::buffer(*str),
boost::bind(&Client::read_hander, this, _1, str)); // 异步读取数据
start(); // 再次启动异步连接
}
void read_hander(const boost::system::error_code &e, boost::shared_ptr<std::vector<char> > str)
{
if (e)
{
return;
}
std::cout << &(*str)[0] << std::endl;
}
};
int main()
{
try
{
std::cout << "client start..." << std::endl;
boost::asio::io_service ios;
Client client(ios);
ios.run();
}
catch (std::exception &e)
{
std::cout << e.what() << std::endl;
} return 0;
}

  

异步socket处理的更多相关文章

  1. GJM :异步Socket [转载]

    原帖地址:http://blog.csdn.net/awinye/article/details/537264 原文作者:Awinye 目录(?)[-] 转载请原作者联系 Overview of So ...

  2. Python简易聊天工具-基于异步Socket通信

    继续学习Python中,最近看书<Python基础教程>中的虚拟茶话会项目,觉得很有意思,自己敲了一遍,受益匪浅,同时记录一下. 主要用到异步socket服务客户端和服务器模块asynco ...

  3. 项目笔记---C#异步Socket示例

    概要 在C#领域或者说.net通信领域中有着众多的解决方案,WCF,HttpRequest,WebAPI,Remoting,socket等技术.这些技术都有着自己擅长的领域,或者被合并或者仍然应用于某 ...

  4. Socket&GCDAsyncSocket(异步Socket)

    Socket ********************************************* 简单理解Socket 就是网络连接,可以实现两个点之间的数据通讯. •Socket允许使用长连 ...

  5. AndroidAsync :异步Socket,http(client+server),websocket和socket.io的Android类库

    AndroidAsync是一个用于Android应用的异步Socket,http(client+server),websocket和socket.io的类库.基于NIO,没有线程.它使用java.ni ...

  6. 可扩展多线程异步Socket服务器框架EMTASS 2.0 续

    转载自Csdn:http://blog.csdn.net/hulihui/article/details/3158613 (原创文章,转载请注明来源:http://blog.csdn.net/huli ...

  7. C# 实现的多线程异步Socket数据包接收器框架

    转载自Csdn : http://blog.csdn.net/jubao_liang/article/details/4005438 几天前在博问中看到一个C# Socket问题,就想到笔者2004年 ...

  8. C# 异步Socket

    C# 异步Socket (BeginXXXX)服务器代码 前言: 1.最近维护公司的一个旧项目,是Socket通讯的,主要用于接收IPC(客户端)发送上来的抓拍图像,期间要保持通讯,监测数据包并进行处 ...

  9. C#异步Socket示例

    C#异步Socket示例 概要 在C#领域或者说.net通信领域中有着众多的解决方案,WCF,HttpRequest,WebAPI,Remoting,socket等技术.这些技术都有着自己擅长的领域, ...

  10. [Unity Socket]在Unity中如何实现异步Socket通信技术

    在刚刚开发Unity项目的过程中,需要用到即时通信功能来完成服务器与客户端自定义的数据结构封装. 现在将部分主要功能的实现代码抽取出来实现了可以异步Socket请求的技术Demo. 客户端脚本Clie ...

随机推荐

  1. crontab 定时执行python脚本

    每天8点30分运行命令/tmp/run.sh * * * /tmp/run.sh 每两小时运行命令/tmp/run.sh */ * * * /tmp/run.sh

  2. linux中date命令显示

    1. date用来显示具体的日期和24进制的时间 [jasmine.qian@ ~]$ date Fri Jan 25 14:17:17 CST 2019 [jasmine.qian@ ~]$ dat ...

  3. springboot 解决配置js/css/img缓存问题

    # 解决配置js/css/img缓存问题 spring.resources.chain.strategy.content.enabled=true spring.resources.chain.str ...

  4. 修改linux镜像

    修改镜像的常用命令有: guestfish,guestmount等. ●修改静态文件. 命令:guestfish 安装包:yum install -y guestfish ①mount镜像:guest ...

  5. feature map 大小以及反卷积的理解

    (1)边长的计算公式是:  output_h =(originalSize_h+padding*2-kernelSize_h)/stride +1 输入图片大小为200×200,依次经过一层卷积(ke ...

  6. CentOS7.6 如何设置静态ip

    [root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/[root@localhost network-scripts] ...

  7. Mac python3.6 安装即使用 psycopg2

    学习下python调用PostgreSQL数据库 首先需要安装 psycopg2 python3安装: pip install psycopg2-binary 官网地址: https://pypi.o ...

  8. traceback模块——获取详细的异常信息

    try: 1/0 except Exception,e: print e 输出结果是integer division or modulo by zero,只知道是报了这个错,但是却不知道在哪个文件哪个 ...

  9. java开学第一周测试自我感想

    开学第一周,王建民老师就对我们进行了java测试,对我们说测试题目是基于期末考试的基础难度来出的.我们的考试完全是靠暑假在家自学的基础,如果在家没有自学java,那完全就是看不懂试卷到底要考什么.由于 ...

  10. ubuntu opencv

    sudo apt-get updatesudo apt-get upgrade sudo apt-get install build-essential libgtk2.0-dev libjpeg-d ...