boost::asio::tcp
同步TCP通信服务端
#include <boost/asio.hpp>
#include <iostream>
using namespace boost::asio;
int main()
{
try
{
io_service io;
ip::tcp::endpoint ep(ip::tcp::v4(), );
ip::tcp::acceptor acceptor(io, ep);
while ()
{
ip::tcp::socket sock(io);
acceptor.accept(sock);
std::cout << "client:" << sock.remote_endpoint().address() << std::endl;
sock.write_some(buffer("hello asio"));
}
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
return ;
}
同步Tcp通信客户端
#include <boost/asio.hpp>
#include <iostream>
#include <vector>
#include <string>
using namespace boost::asio;
int main()
{
try
{
io_service io;
ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"), );
ip::tcp::socket sock(io);
sock.connect(ep);
char str[];
sock.read_some(buffer(str));
std::cout << "receive from" << sock.remote_endpoint().address() << std::endl;;
std::cout << str << std::endl;
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
getchar();
return ;
}
// BoostTcpServer.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "boost/asio.hpp"
#include "boost/thread.hpp"
using namespace std;
using namespace boost::asio;
#ifdef _MSC_VER
#define _WIN32_WINNT 0X0501 //避免VC下编译警告
#endif
#define PORT 1000
#define IPV6
//#define IPV4
int _tmain(int argc, _TCHAR* argv[])
{
// 所有asio类都需要io_service对象
io_service iosev;
//创建用于接收客户端连接的acceptor对象
#ifdef IPV4
ip::tcp::acceptor acceptor(iosev,ip::tcp::endpoint(ip::tcp::v4(), PORT));
#endif
#ifdef IPV6
ip::tcp::acceptor acceptor(iosev,ip::tcp::endpoint(ip::tcp::v6(), PORT));
#endif
while (true)
{
// socket对象
ip::tcp::socket socket(iosev);
// 等待直到客户端连接进来
acceptor.accept(socket);
// 显示连接进来的客户端
std::cout <<"remote ip:"<<socket.remote_endpoint().address()<<endl;
std::cout <<"remote port:"<<socket.remote_endpoint().port() << std::endl;
char buf[];
boost::system::error_code ec;
while()
{
socket.read_some(buffer(buf),ec);
if (ec)
{
std::cout <<boost::system::system_error(ec).what() << std::endl;
break ;
}
std::cout<<"recv msg:"<<buf<<endl;
if(strcmp(buf,"bye")==)//收到结束消息结束客户端连接
{
break;
}
socket.write_some(buffer("I heared you!\n"),ec);
if (ec)
{
std::cout <<boost::system::system_error(ec).what() << std::endl;
break ;
}
}
socket.close();
// 与当前客户交互完成后循环继续等待下一客户连接
}
return ;
}
#include "stdafx.h"
#include "boost/asio.hpp"
using namespace boost::asio;
#ifdef _MSC_VER
#define _WIN32_WINNT 0X0501 //避免VC下编译警告
#endif
#define PORT 1000
#define IPV6
//#define IPV4
int _tmain(int argc, _TCHAR* argv[])
{
// 所有asio类都需要io_service对象
io_service iosev;
// socket对象
ip::tcp::socket socket(iosev);
// 连接端点,这里使用了本机连接,可以修改IP地址测试远程连接
#ifdef IPV4
ip::address_v4 address=ip::address_v4::from_string("127.0.0.1");
#endif
#ifdef IPV6
//"0:0:0:0:0:0:0:1"为IPV6的本机回环地址,类似于"127.0.0.1"
ip::address_v6 address=ip::address_v6::from_string("0:0:0:0:0:0:0:1");
#endif
ip::tcp::endpoint ep(address, PORT);
// 连接服务器
boost::system::error_code ec;
socket.connect(ep,ec);
// 如果出错,打印出错信息
if (ec)
{
std::cout << boost::system::system_error(ec).what() << std::endl;
return -;
}
//循环发送和接收数据
for(int i=;i<;++i)
{
//发送数据
socket.write_some(buffer("hello"), ec);
// 接收数据
char buf[];
size_t len=socket.read_some(buffer(buf), ec);
std::cout.write(buf, len);
Sleep();
}
//发送与服务端约定好的结束语,由服务端断链
socket.write_some(buffer("bye"), ec);
getchar();
return ;
}
boost::asio::tcp的更多相关文章
- boost asio tcp server 拆分
从官方给出的示例中对于 boost::asio::ip::tcp::acceptor 类的使用,是直接使用构造函数进行构造对象,这一种方法用来学习是一个不错的方式. 但是要用它来做项目却是不能够满足我 ...
- qt+boost::asio+tcp文件传输
客户端: void qt_boost::pbSendFileClicked(){ QString filename = ui.leFileName->text(); QByteArray ba ...
- boost asio tcp 多线程
common/pools.h // common/pools.h #pragma once #include <string> #include <boost/pool/pool.h ...
- boost asio tcp 多线程异步读写,服务器与客户端。
// server.cpp #if 0 多个线程对同一个io_service 对象处理 用到第三方库:log4cplus, google::protobuf 用到C++11的特性,Windows 需要 ...
- 使用Boost asio实现同步的TCP/IP通信
可以先了解一下Boost asio基本概念,以下是Boost asio实现的同步TCP/IP通信: 服务器程序部分,如果想保留套接字之后继续通信,可以动态申请socket_type,保存指针,因为so ...
- 使用Boost asio实现异步的TCP/IP通信
可以先了解一下Boost asio基本概念,以下是Boost asio实现的异步TCP/IP通信: 服务器: #include "stdafx.h" #include <io ...
- boost asio 异步实现tcp通讯
---恢复内容开始--- asioboost 目录(?)[-] 一前言 二实现思路 通讯包数据结构 连接对象 连接管理器 服务器端的实现 对象串行化 一.前言 boost asio可算是一个简 ...
- boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=8 7. Net ...
- boost::asio::ip::tcp实现网络通信的小例子
同步方式: Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型. 头文件 #include <boost/asio.hpp> 名空 ...
随机推荐
- Go微服务容错与韧性(Service Resilience)
Service Resilience是指当服务的的运行环境出现了问题,例如网络故障或服务过载或某些微服务宕机的情况下,程序仍能够提供部分或大部分服务,这时我们就说服务的韧性很强.它是微服务中很重要的一 ...
- CSS从大图中抠图然后显示其中的一部分
相信大家在使用css时会遇到一个情况吧 就是一张大图片里面什么都有 各种图标都有 然而自己就是不太会使用其中的小图标 这是我最近的一次学习 首先上图 这么大一张图片 那么这么使其只显示一部分 并且为我 ...
- Guava的常用方法示例
Guava Maven Dependency <dependency> <groupId>com.google.guava</groupId> <artifa ...
- C# 时间戳的相关操作
一般的 时间戳 格式分为两种 即 10位(秒)时间戳 与 13位(毫秒)时间戳 时间戳 类型也分为两种 即 本地时间戳 与 世界统一(UTC)时间戳 废话不多说,直接上代码: 一.时间戳获取方法 // ...
- 2019-2020-1 20199303 《Linux内核原理分析》 第一周作业
2019-2020-1 20199303 <Linux内核原理分析> 第一周作业 1. 环境准备 在众多的Linux发行版中,Ubuntu,小红帽还有类Unix系统的BSD系统,我选择了目 ...
- ZK集群的Leader选举源码阅读
前言 ZooKeeper对Zab协议的实现有自己的主备模型,即Leader和learner(Observer + Follower),有如下几种情况需要进行领导者的选举工作 情形1: 集群在启动的过程 ...
- 定一条数据用: => slot-scope属性,再显示对应的数据
通过 Scoped slot 可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据: {{scope.row}} =>获取整行的数据 {{sco ...
- Linux下mysql相关操作
Linux下mysql相关操作 1.创建MySQL mysql -u root -p create user 'username'@'%' identified by 'password'; %可以选 ...
- git分支概念与项目中的应用
文档:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B 分支理解 m ...
- Http协议Content-Length详解
前言 http协议是互联网中最重要的协议之一,虽然看上去很简单,但是实际中经常遇到问题,我们就已经遇到好几次了.有长连接相关的,有报文解析相关的.对http协议不能一知半解,必须透彻理解才行.本文通过 ...