服务器端:

#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. python requests post和get

    import requests import time import hashlib import os import json from contextlib import closing impo ...

  2. 实现一个优先级队列,每次pop 返回优先级最高的元素

    demo1 实现一个按优先级排序的队列, 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素 import heapq class PriorityQueue: def __init__ ...

  3. python os.remove

    remove 只能删除文件,删除目录会报错 >>> import os >>> os.remove("/opt/xxx/server_log/test&q ...

  4. [C#]获取指定文件夹下的所有文件名(递归)

    典型的递归方法: //定义一个list集合 List<String> list = new List<String>(); public void director(strin ...

  5. mo系统常用语句

    mo系统常用语句 一.总结 一句话总结: 1.语言:双语设置(繁体,英语)语句? {:chooseLanguage("確定要刪除么","Are you sure you ...

  6. ubuntu 14.04 postgresql 的总结

    1)为了允许远程连接: a) http://askubuntu.com/questions/423165/remotely-access-postgresql-database To open the ...

  7. Spring Boot入门第四天:使用Thymeleaf模板引擎

    原文链接 关于Thymeleaf的优点,我只说一条:它就是html页面啊,直接可以用浏览器打开.受够了JSP的同学可以尝试一下. 1.在pom.xml文件中添加依赖: <!--<depen ...

  8. Ubuntu更改源和搜狗输入法安装卸载

    安装完Ubuntu 16.04后,要更换为国内的软件源: sudo gedit /etc/apt/sources.list   #用文本编辑器打开源列表 在文件开头添加下面的阿里云的软件源: deb ...

  9. Python 编程快速上手 第十四章 处理 CSV 文件和 JSON 数据

    前言 这一章分为两个部分,处理 CSV 格式的数据和处理 JSON 格式个数据. 处理 CSV 理解 csv csv 的每一行代表了电子表格中的每一行,每个逗号分开两个单元格csv 的内容全部为文本, ...

  10. @Basic表示一个简单的属性 懒加载,急加载

    5.@Basic(fetch=FetchType,optional=true) 可选 @Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认 即为 @Ba ...