1.socket类是TCP通信的基本类,调用成员函数connect()可以连接到一个指定的通信端点,连接成功后用local_endpoint()和remote_endpoint()获得连接两端的端点信,用read_some()和write_some()阻塞读写数据,当操作完成后使用close()函数关闭socket。如果不关闭socket,那么在socket析构时也会自动调用close()关闭。
2.acceptor类对应socketAPI的accept()函数功能,它用于服务器端,在指定的端口号接受连接,必须配合socket类才能完成通信。
3.resolver类对象socketAPI的getaddrinfo()系列函数,用于客户端解析网址获得可用的IP地址,解析得到的IP地址可以使用socket对象连接。

服务器端:

#include <boost/thread.hpp>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp> int main()
{
try
{
std::cout << "server start..." << std::endl;
boost::asio::io_service ios;
boost::asio::ip::tcp::acceptor acceptor(ios, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 6688)); // 接受6688端口
std::cout << acceptor.local_endpoint().address() << std::endl;
while (true) // 循环执行服务
{
boost::asio::ip::tcp::socket sock(ios); // socket对象
acceptor.accept(sock); // 阻塞等待socket连接
std::cout << "client:";
std::cout << sock.remote_endpoint().address() << std::endl;
sock.write_some(boost::asio::buffer("hello client...")); // 发送数据 }
}
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 a_timer
{
private:
int count, count_max;
boost::function<void()> f; // 无参无返回的可调用用
boost::asio::deadline_timer t; // 定时器
public:
template<typename F>
a_timer(boost::asio::io_service &ios, int x, F func) :
f(func), count_max(x), count(0), t(ios, boost::posix_time::millisec(500))
{
t.async_wait(boost::bind(&a_timer::call_func, this, _1)); // 注册回调函数
}
void call_func(const boost::system::error_code &e)
{
if (count > count_max)
{
return;
}
++count;
f();
t.expires_at(t.expires_at() + boost::posix_time::millisec(500));
t.async_wait(boost::bind(&a_timer::call_func, this, _1)); // 再次启动定时器
}
}; void client(boost::asio::io_service &ios)
{
try
{
std::cout << "client start..." << std::endl;
boost::asio::ip::tcp::socket sock(ios);
boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string("127.0.0.1"), 6688);
sock.connect(ep); // socket连接到端点
std::vector<char> str(100, 0);
sock.read_some(boost::asio::buffer(str)); // 接收数据
std::cout << "recive from " << sock.remote_endpoint().address() << ": ";
std::cout << &str[0] << std::endl;
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
}
int main()
{
boost::asio::io_service ios;
a_timer t(ios, 5, boost::bind(client, boost::ref(ios)));
ios.run();
return 0;
}

  

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

  1. [Boost基础]并发编程——asio网络库——同步socket处理

    网络通信简述 asio库支持TCP,UDP和ICMP通信协议,它在名字空间boost::asio::ip里提供了大量的网络通信方面的函数和类,很好的封装了原始的Berkeley Socket API, ...

  2. 简单的同步Socket程序服务端

    首先,Socket是.Net提供的 System.Net.Sockets命名空间的Scoket类为网络通信提供了一套丰富的方法和属性 服务器按照Socket的基本流程 先创建Socket 在用Bind ...

  3. C#网络编程系列(两)它Socket同步TCPserver

    声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文 ...

  4. Socket初识

    基础概念 Socket,套接字,本质是网络编程接口.提供网络通信的能力,实现不同虚拟机或不同计算机之间的通信.面向客户/服务(C/S)模型,socket是应用层和传输层之间的中间软件抽象层: 顶上三层 ...

  5. 简单socket()编程

    客户端: 1.socket( int af, int type, int protocol) socket()函数用于根据指定的地址族.数据类型和协议来分配一个套接口的描述字及其所用的资源.如果协议p ...

  6. Socket网络编程-基础篇

    Socket网络编程 网络通讯三要素: IP地址[主机名] 网络中设备的标识 本地回环地址:127.0.0.1 主机名:localhost 端口号 用于标识进程的逻辑地址 有效端口:0~65535 其 ...

  7. 关于Web开发里并发、同步、异步以及事件驱动编程的相关技术

    一.开篇语 我的上篇文章<关于如何提供Web服务端并发效率的异步编程技术>又成为了博客园里“编辑推荐”的文章,这是对我写博客很大的鼓励,也许是被推荐的原因很多童鞋在这篇文章里发表了评论,有 ...

  8. 同步和异步UDP使用方法

    同步和异步Socket的区别是,同步Socket会阻塞当前进程,而异步Socket则不会. 首先,一个最简单的同步UDP收发程序实例.可以看到,发送调用Send()函数之后,开始调用Receive接收 ...

  9. TCP/IP的Socket编程

    1. TCP/IP.UDP的基本概念 TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,他是一个工业标准的协议集, ...

随机推荐

  1. ubuntu14.04 Keras框架搭建

    >>>sudo su >>> pip3 install -U --pre pip setuptools wheel >>> pip3 instal ...

  2. 一: vue的基本使用

    一: vue的下载 vue.js是目前前端web开发最流行的工具库之一,由尤雨溪在2014年2月发布的. 另外几个常见的工具库:react.js /angular.js 官方网站: ​ 中文:http ...

  3. NoSQL(not only struts query language)的简单介绍

    为什么需要NoSQL? 互联网自扩大规模来一直面临3个问题 1.High performance高并发 一个网站开发实时生成动态页面可能会存在高并发请求的需求,硬盘IO已经无法接受 2.Huge St ...

  4. 《剑指offer》第六十六题(构建乘积数组)

    // 面试题66:构建乘积数组 // 题目:给定一个数组A[0, 1, …, n-1],请构建一个数组B[0, 1, …, n-1],其 // 中B中的元素B[i] =A[0]×A[1]×… ×A[i ...

  5. 牛客小白月赛7 B 自杀游戏

    自杀游戏 思路: sg函数 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include&l ...

  6. 【转载】LINUX下安装wget命令(SFTP实现法)

    如何安装wget命令. 方法一:通过yum 命令行为:yum install wget 完成.此操作很简单,但是我安装的linux是centos的最小版本,运行上述命令时会出现无法连接到源网站(大概是 ...

  7. python中的面向对象学习之继承实例讲解

    __author__ = "Yanfeixu" class School(object): # object是基类,所有的类都是继承这个--新式类 def __init__(sel ...

  8. 在python中使用正则表达式(二)

    这一节主要学习一下compile()函数和group()方法 1.  re.compile() compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,然后就可以用编译后 ...

  9. 雷林鹏分享:C# 类型转换

    C# 类型转换 类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型.在 C# 中,类型铸造有两种形式: 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换.例如,从小的 ...

  10. 20170914xlVBA通讯公司分类汇总

    Sub 租房() Dim Wb As Workbook Dim Sht As Worksheet Dim OpenWb As Workbook Dim OpenSht As Worksheet Dim ...