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> 名空 ...
随机推荐
- Linux 笔记 - 几个常用且重要的命令
博客地址:http://www.moonxy.com Linux 系统中提供了大量的命令,从文件目录管理,用户管理,到系统监控等等,功能非常丰富,但有几个是常用且重要的命令. 1. 命令 grep 作 ...
- .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使用
书接上文,继续搭建我们基于.netCore 的开发框架.首先是我们的项目分层结构. 这个分层结构,是参考张老师的分层结构,但是实际项目中,我没有去实现仓储模型.因为我使用的是EFCore ,最近也一直 ...
- Java中对象创建时的内存分配
一.前言知识铺垫 1.逃逸对象:在一个方法内创建的对象没有被外界引用则称该对象为未逃逸的对象. 2.JDK1.6以后的HotSpot虚拟机支持运行时的对象逃逸分析. 3.JVM中的参数配置: 1) ...
- Linux线程唤醒与等待
生产者消费者模式在程序设计中出现频率非常高,经常会有线程间通过消息队列或其他共享变量进行交互的场景.而这时就会出现一个问题,消费者如何知道生产者已经生产了数据呢?有的程序会采取消费者循环判断消息队列大 ...
- SpringCloud之Turbine
[前面的话]书接上文,本文的某些知识依赖我的上一篇SpringCLoud的文章:SpringCloud之Feign,如果没有看过可以先移步去看一下.前文提到了hystrix的应用,以及hystrix的 ...
- el-table合并行并自定义某一列或几列
在el-table的官方组件中并没有看到具体的合并行或者列及自定义表格内容,于是就自己写了一个效果如下所示. 这种对左侧内容要求比较高,要求行合并,并要自定义一些内容.下面说一下具体方法及代码写法. ...
- Python学习-列表元组字典操作
一.列表 列表是Python的基本数据类型之一,它是以 [] 括起来的,内部成员用逗号隔开.里面可以存放各种数据类型. # 例如: list2 = ['jason', 2, (1, 3), ['war ...
- 【Dgango】模版
继承 ① extends用法:只继承一个模版 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- java调用python的几种用法(看这篇就够了)
java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...
- 002-python函数、高级特性
1.函数 1.1 定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回 自定义一个求绝对 ...