19.5 Boost Asio 传输结构体
同步模式下的结构体传输与原生套接字实现方式完全一致,读者需要注意的是在接收参数是应该使用socket.read_some函数读取,发送参数则使用socket.write_some函数实现,对于套接字的解析同样使用强制指针转换的方法。
服务端代码如下所示
#include <iostream>
#include <boost/asio.hpp>
typedef struct
{
int uuid;
char uname[1024];
}message;
using namespace boost::asio;
int main(int argc, char* argv[])
{
io_service io_service;
ip::tcp::acceptor acceptor(io_service,ip::tcp::endpoint(ip::tcp::v4(), 1000));
ip::tcp::socket socket(io_service);
acceptor.accept(socket);
boost::system::error_code error_code;
// 定义接收结构
char recv_buffer[sizeof(message) * 2] = { 0 };
socket.read_some(boost::asio::buffer(recv_buffer, sizeof(message) * 2), error_code);
// 强转为指针
message *msg = (message *)recv_buffer;
std::cout << "数组1: " << msg[0].uname << std::endl;
std::cout << "数组2: " << msg[1].uname << std::endl;
if (error_code)
{
std::cout << boost::system::system_error(error_code).what() << std::endl;
return -1;
}
std::system("pause");
return 0;
}
客户端代码如下所示
#include <iostream>
#include <boost/asio.hpp>
using namespace boost::asio;
typedef struct
{
int uuid;
char uname[1024];
}message;
message msg[2];
int main(int argc, char* argv[])
{
io_service io_service;
ip::tcp::socket socket(io_service);
ip::tcp::endpoint ep(ip::address_v4::from_string("127.0.0.1"), 1000);
boost::system::error_code error_code;
socket.connect(ep, error_code);
// 定义发送变量
char send_buffer[sizeof(message) * 2] = { 0 };
// 将数据拷贝到结构中
msg[0].uuid = 100;
strcpy(msg[0].uname, "lyshark");
msg[1].uuid = 200;
strcpy(msg[1].uname, "admin");
// 发送字节序
memcpy(send_buffer, &msg, sizeof(message) * 2);
socket.write_some(boost::asio::buffer(send_buffer, sizeof(message) *2 ));
if (error_code)
{
std::cout << boost::system::system_error(error_code).what() << std::endl;
return -1;
}
std::system("pause");
return 0;
}
读者可自行编译并运行上述代码,则可实现对结构体的传输功能,输出效果如下图所示;

19.5 Boost Asio 传输结构体的更多相关文章
- C与C# socket 跨平台通讯传输结构体
最近需要写一个C组成的服务器端与C#的客户端进行交互的软件,刚开始写的时候发现C#端解析时候出现了故障,经过仔细研究后发现原因是发送方传输太快,出现了所谓粘包的现象.也就是在C#端的Receive() ...
- 15-C语言结构体
目录: 一.大型软件开发 二.头文件和static 三.结构体 四.联合 五.枚举 回到顶部 一.大型软件开发 将一个代码中的内容,拆分成多个文件,最后的可执行文件只要一个. 操作步骤: 1 原来只有 ...
- Linux C Socket编程发送结构体、文件详解及实例
利用Socket发送文件.结构体.数字等,是在Socket编程中经常需要用到的.由于Socket只能发送字符串,所以可以使用发送字符串的方式发送文件.结构体.数字等等. 本文:http://www.c ...
- Swift具体解释之六----------------枚举、结构体、类
枚举.结构体.类 注:本文为作者自己总结.过于基础的就不再赘述 ,都是亲自測试的结果.如有错误或者遗漏的地方.欢迎指正,一起学习. 1.枚举 枚举是用来定义一组通用类型的一组相关值 ,关键字enum ...
- [C++基础入门] 8、结构体
文章目录 8 结构体 8.1 结构体基本概念 8.2 结构体定义和使用 8.3 结构体数组 8.4 结构体指针 8.5 结构体嵌套结构体 8.6 结构体做函数参数 8.7 结构体中 const使用场景 ...
- qt+boost::asio+tcp文件传输
客户端: void qt_boost::pbSendFileClicked(){ QString filename = ui.leFileName->text(); QByteArray ba ...
- C语言基础(19)-结构体,联合体,枚举和typedef
一.结构体 1.1 结构体struct定义及初始化 #include <stdio.h> // 这个头文件在系统目录下 #include <stdlib.h> // 使用了sy ...
- boost::asio译文
Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENS ...
- Boost.Asio技术文档
Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...
- BOOST.Asio——Overview
=================================版权声明================================= 版权声明:原创文章 谢绝转载 啥说的,鄙视那些无视版权随 ...
随机推荐
- 如何在传统前端项目中进行javascript模块化编程,并引入使用vue.js、element-ui,并且不依赖nodejs和webpack?
最近接手一个Web三维项目,前后端分离,前端是传统的前端项目,但又是模块化的开发方式,在修改的过程中,我需要做一些增删改查的功能,又想尽可能少的写css.尽可能少的直接操作DOM元素,所以引入了ele ...
- @Scheduled cron 定时任务表达式含义,及* ?的区别
好多网友对@Scheduled cron表达式含义做了阐述,个人认为很多对于 * ?的说明不够具体也不算准确,借此本文特别对 * ?做一下说明. cron格式:[秒数][分钟][小时][日期][月份] ...
- AISing Programming Contest 2021(AtCoder Beginner Contest 202) 简单题解记录
补题链接:Here A - Three Dice 水题,问给定三次摇色子的正面,请问3次结果以后相对面的点数和 cout << (21 - a - b - c) << &quo ...
- nvm:npm的包管理器
NVM: npm的包管理器 其实许久前就像写这个模块了,只是之前使用后又搁置了,今天下项目时node版本不一致,才想起记录 nvm下载地址: Releases · coreybutler/nvm-wi ...
- SpringBoot Serverless 实战 | 监控调试
SpringBoot 是基于 Java Spring 框架的套件,它预装了 Spring 的一系列组件,让开发者只需要很少的配置就可以创建独立运行的应用程序.在云原生的世界,有大量的平台可以运行 Sp ...
- P5731
https://www.luogu.com.cn/problem/P5731 这道题被标为红题,真实难度应该介于红题和橙题之间,问题在于我高估了它的难度,以为至少有橙题的难度,一般不打表的我毫不犹豫选 ...
- C#使用正则表达式检查字符串中重复出现的词
private void button1_Click(object sender, EventArgs e) { MatchCollection matches =//使用正则表达式查找重复出现单词的 ...
- java项目实践-请求转发以及重定向-day18
目录 1. 中文乱码问题 2. 请求的转发servlet 3. 登录后的重定向 4 总结 1. 中文乱码问题 创建一个工程secondweb 添加jar包依赖 new servlet web.xml添 ...
- 05-Shell索引数组变量
1.介绍 Shell 支持数组(Array),数组是若干数据的集合,其中的每一份数据都称为数组的元素. 注意Bash Shell 只支持一维数组,不支持多维数组. 2.数组的定义 2.1 语法 在 S ...
- 例2.6 设计一个高效的算法,从顺序表L中删除所有值为x的元素,要求时间复杂度为0(n)空间复杂度为0(1)。
1.题目 例2.6 设计一个高效的算法,从顺序表L中删除所有值为x的元素,要求时间复杂度为0(n)空间复杂度为0(1). 2.算法思想 3.代码 void DeleteX(SeqList LA, Se ...