网络传输 buf 封装 示例代码
网络传输 buf 封装 示例代码
使用boost库 asio
// BufferWrapTest.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "BufStruct.h" #include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp> using boost::asio::ip::tcp; DEF::BufferStruct make_message()
{
using namespace DEF; // For time_t, time and ctime;
BufferHead bh('|',strlen("hello world!"));
BufferStruct bs;
bs.head = bh;
memcpy( bs.bufBody,"hello world!", bh.bufferLenth);
return bs;
} int main()
{
try
{
boost::asio::io_service io_service; tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 9013)); for (;;)
{
tcp::socket socket(io_service);
acceptor.accept(socket); DEF::BufferStruct message = make_message();
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer(&message,message.GetLength()+sizeof(DEF::BufferHead)), ignored_error);
}
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
} return 0;
}
#pragma once
#include <string>
#include <memory>
#include <iostream> namespace DEF {
const int BUF_MAX_LENTH = 1024 * 1;
const char MAGIC_CHAR = '|'; #pragma pack (push,1)
struct BufferHead {
char flag; // should equal '|'
unsigned int bufferLenth;
BufferHead() {
flag = 0;
bufferLenth = 0;
}
BufferHead(char f, unsigned int len) {
flag = f;
bufferLenth = len;
} }; struct BufferStruct {
BufferHead head;
char bufBody[BUF_MAX_LENTH];
BufferStruct() {}
BufferStruct(const BufferStruct& b) {
head = b.head;
memcpy(bufBody, b.bufBody, b.head.bufferLenth);
}
char* GetBody() { return bufBody; }
unsigned int GetLength() { return head.bufferLenth; }
};
#pragma pack(pop)
}
网络传输 buf 封装 示例代码的更多相关文章
- java封装示例代码
package com.imooc; public class Telphone { private float screen; private float cpu; private float me ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完毕測试代码)
MD5和RSA是网络传输中最经常使用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,仅仅能加密而不能解密. ...
- Android判断当前网络是否可用--示例代码
Android判断当前网络是否可用--示例代码 分类: *07 Android 2011-05-24 13:46 7814人阅读 评论(4) 收藏 举报 网络androiddialogmanagern ...
- 1.NetDh框架之数据库操作层--Dapper简单封装,可支持多库实例、多种数据库类型等(附源码和示例代码)
1.NetDh框架开始的需求场景 需求场景: 1.之前公司有不同.net项目组,有的项目是用SqlServer做数据库,有的项目是用Oracle,后面也有可能会用到Mysql等,而且要考虑后续扩展成主 ...
- 一个网络传输框架——zeroMQ 调研笔记
一.它是什么 zeroMQ,一个处理消息传输的库,重点在传输上,看起来它像是在socket上面封装了一层,让我们可以很容易的利用它来做N对M的数据传输,在分布式系统中很方便,在接收端它有round-r ...
- Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)
catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI ...
- python开源项目及示例代码
本页面是俺收集的各种 Python 资源,不定期更新. 下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的:否则是 Python 语言内置的. 1 算法 1.1 字符串处理 ...
- C/C++ 开源库及示例代码
C/C++ 开源库及示例代码 Table of Contents 说明 1 综合性的库 2 数据结构 & 算法 2.1 容器 2.1.1 标准容器 2.1.2 Lockfree 的容器 2.1 ...
随机推荐
- ubuntu命令行打开网页
在Ubuntu下,当需要打开其他格式文件时,比如pdf.jpg.mp3等格式文件,通常做法是进入到文件所在的目录,双击打开,很影响效率.事实上,可以通过命令xdg-open打开这些格式文件,甚至是网页 ...
- MySQL 批量添加
自己封装的一个批量添加. $data 是一个二维数组.key对应是数据表的字段名: /** * 批量创建 * @param array $data * @return int $res 影响行 * @ ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑【转发】
原文地址:http://www.cnblogs.com/hbccdf/archive/2014/03/09/3590916.html 自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问 ...
- 搜狗浏览器总是打开123.sogou.com-记搜狗浏览器遭遇劫持一例
昨日,因从网上下载了office2010破解工具,压缩包中有个文件为名为[office 2010激活工具\为保证永久激活,要先点击这个配置,再点击KMSELDIYI激活.exe],单击之后没有反应.后 ...
- Oracle 语句整理
1 查出列当中重复的值 select ip2,count(*) from vm_info group by ip2 having count(*)>1 期中ip2为列名 vm_inf ...
- 02-Introspector内省设置单个属性
package com.oa.test; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; ...
- 从OsChina Git下载项目到MyEclipse中
前提是,拥有权限下载 1.进入MyEclipse,点击File-->Import,选择Git,点击“Next”,如下图: , 2.选择“URI”,点击"Next" 3.输入项 ...
- uva-10382-贪心
题意:对于长为L,宽为W的矩形草地,需要对它进行浇水,总共有n个水龙头,给每个水龙头的浇水半径,和位置.求覆盖整个草地需要的最小水龙头数量. 如图,把浇水的面积转换成矩形,然后就和区间覆盖一样了,直接 ...
- script 写在body和head的区别(WEUI中使用swiper删除)
区别简述: 在HTML body部分中的JavaScripts会在页面加载的时候被执行.在HTML head部分中的JavaScripts会在被调用的时候才执行. JavaScript应放在哪里 ...
- JAVA Maven 安装 jar 包到本地仓库,以 Oracle11g 的访问包 为例
maven 作为 java 的首选包管理工具,使我们在创建和维护项目的时候变得十分简单,但是 maven 仓库并不是拥有的一切 jar 包的, 很多 jar 包由于收费或者版权什么的其他原因,并不存在 ...