websocket 传输数据帧打包 (client端)
/*
Vertion: 0.2.1
date: 2015.8.11
content: gcc 编译通过
*/ //websocket 传输数据帧打包 client端
//参数:src 为输入字符串
// len为输入字串src长度
// mask为4个字节掩码值
// des 为输出掩码后字节数组。
// sum 为输出des实际长度 (len+6: len<=125
// len+8: 125<len<=65535
// len+10: len>65535
// 0: 组帧失败)
void maskpak(unsigned char src[],
unsigned int len,
unsigned char mask[],
unsigned char des[],
unsigned int *sum)
{
unsigned char FIN =0X80;
unsigned char RSV1 =0X00;
unsigned char RSV2 =0X00;
unsigned char RSV3 =0X00;
unsigned char OPCODE =0X01; //文本帧
unsigned char MASK =0X80; //掩码标识
unsigned char PLEN =0X00; int index=;
int i; des[index++]= FIN +RSV1 +RSV2 +RSV3 +OPCODE; if(len<=)
{
PLEN =len;
}else if(len<=0XFFFF)
{
PLEN =;
}else
{
PLEN =;
}
des[index++]= MASK +PLEN; //网络字节序标准为: 大端方式(即高字节在前低字节在后)
if(PLEN<=)
{
*sum= len+;
}
else if(==PLEN)
{
unsigned short temp;
temp =len;
des[index++] =(unsigned char)(temp>>);
des[index++] =(unsigned char)temp;
*sum= len+;
}else if(==PLEN)
{
unsigned int temp;
temp =len;
des[index++] =(unsigned char)(temp>>);
des[index++] =(unsigned char)(temp>>);
des[index++] =(unsigned char)(temp>>);
des[index++] =(unsigned char)temp;
*sum=len+;
}else
{
*sum= ;
return;
} for(i=;i<;i++)
{
des[index++] =mask[i];
} for(i=;i<len;i++)
{
des[index++] =src[i]^mask[i%];
}
} // 测试代码
int main(int argc,char *argv)
{
unsigned char src[];
unsigned char mask[]= {0X00,0X00,0X00,0X00};
unsigned char des[+];
unsigned int len = ;
unsigned int sum; int i; for (i=;i<;i++)
{
src[i] = i;
}
maskpak(src,len,mask,des,&sum); printf("SUM=%d \r\n",sum);
for(i=;i<sum;i++)
{
printf("%.2X ",(unsigned char)(des[i]));
} return ;
}
websocket 传输数据帧打包 (client端)的更多相关文章
- 利用WebSocket传输数组或者Blob的方案
最近在利用Html5的WebSocket进行即时通讯,一点小心得,大家一起讨论吧 首先把WebSocket的协议网址和WebSocket API网址给大家: 协议:http://tools.ietf. ...
- UDP也需要现有Server端,然后再有Client端
UDP编程: DatagramSocket(邮递员):对应数据报的Socket概念,不需要创建两个socket,不可使用输入输出流. DatagramPacket(信件):数据包,是UDP下进行传输数 ...
- Linux下的C Socket编程 -- 简介与client端的处理
Linux下的C Socket编程(一) 介绍 Socket是进程间通信的方式之一,是进程间的通信.这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上.只要他们之间建立起了sock ...
- Python自动化之rabbitmq rpc client端代码分析(原创)
RPC调用client端解析 import pika import uuid # 建立连接 class FibonacciRpcClient(object): def __init__(self): ...
- 用C#基于WCF创建TCP的Service供Client端调用
本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Servi ...
- 从零开始学习Node.js例子四 多页面实现数学运算 续二(client端和server端)
1.server端 支持数学运算的服务器,服务器的返回结果用json对象表示. math-server.js //通过监听3000端口使其作为Math Wizard的后台程序 var math = r ...
- Zookeeper全解析——Client端(转)
Zookeeper的Client直接与用户打交道,是我们使用Zookeeper的interface.了解ZK Client的结构和工作原理有利于我们合理的使用ZK,并能在使用中更早的发现问题.本文将在 ...
- JDE报表开发笔记(Client端导出Excel乱码)
之前导出Excel时没发生任何问题, Client端PL/SQL字符集为UTF-8 Oracle JDE E910字符集为UTF-8 解决方式:添加指定用户的字符集(上图即为修改后的用户字符集) 角色 ...
- JS读取client端的文件的代码片段
JS读取client端的文件内容的代码片段 if(window.FileReader){ var html5file = this.pipeDetailFileUpLoader._files[0]; ...
随机推荐
- 【windows】windows安全基础
windows安全基础 安全主体 security principal 是可以进行身份验证的实体. 哪个安全主体在要求访问?这个维度可以是用户,计算机和进程.一旦确认以后,系统就会发放SID. 例子: ...
- javascript 异常处理
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- java基础笔记(11)
css 样式的设置主要有选择器+声明{}:声明里又分为属性和值: 注释代码:/*注释语句*/ 内联式:写在元素开始的标签里:例:<p style = "color:red;font-s ...
- Pycharm2019.1.3破解
搬运: T3ACKYHDVF-eyJsaWNlbnNlSWQiOiJUM0FDS1lIRFZGIiwibGljZW5zZWVOYW1lIjoi5bCP6bifIOeoi+W6j+WRmCIsImFzc ...
- bootstrap使用总结(导航在carousel居中之上)
在导航中想实现这样 carousel 在底部,导航条在上面中间,div结构为以下 <div class="navbar-wrapper"style="width: ...
- Django 调试models 输出的SQL语句 定位查看结果
django 调试models变得更为简单了,不用像之前的版本, 手工去调用django query, 才能打印出之前的代码是执行的什么SQL语句. 1.3开始只需在settings.py里,配置如下 ...
- jupyter与requests的初步使用
upyter 是一个简易的,方便的写Python代码的工具包,requests是Python里非常好用的用来发送 http 请求的包. 开始学习本教程之前,请确保你已经安装了Python,并且安装了P ...
- es6中let实例应用之一
有如下情景 html部分: <button class="btn">按钮1</button> <button class="btn" ...
- http协议中常见的状态码以及请求方式,http协议的组成
请求状态码: 2xxx:表示请求成功,例如200. 3xxx:表示请求被重定向,表示完成请求,需要进一步操作,例如 302. 4xxx:表示请求错误,例如:404,资源没有找到. 5xxx:表示服务器 ...
- 深入理解hadoop值MapReduce(2)
1.MapReduce编程模型概述 MapReduce编程模型给出了分布式的编程方法,总共分为5个步骤.分为这5个步骤的优点:组件化和并行化 (1)迭代.遍历输入数据,并将其解析成key/value键 ...