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]; ...
随机推荐
- 应用安全 - CMS - vBulletin漏洞汇总
SSV-15384 Date: 2004.11 漏洞类别: SQL 注入 SSV-15476 Date: 2005.2 漏洞类别: RCE SSV-15482 Date: 2005.2 类型: RCE ...
- js while循环
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- /etc/syscofig/network 修改主机名
[root@mysql ~]# cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=mysql
- 数据库系统原理之SQL(四)
数据库系统原理之SQL(四) 1. 数据更新 插入数据 INSERT-VALUES语句 #插入多条数据 insert [into] table_name (column_name,...) value ...
- Mybatis-学习笔记(6)Mybatis的事务管理机制
1.什么是事务. 多个数据库原子访问应该被绑定成一个整体,这就是事务.事务是一个最小的逻辑执行单元,整个事务不能分开执行,要么同时执行,要么同时放弃执行. 事务的4个特性:原子性.一致性.隔离性.持续 ...
- 剑指Offer编程题(Java实现)——两个链表的第一个公共结点
题目描述: 输入两个链表,找出它们的第一个公共结点. 思路一: 设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a. ...
- 获取客户机MAC地址 根据IP地址 获取机器的MAC地址 / 获取真实Ip地址
[DllImport("Iphlpapi.dll")] private static extern int SendARP(Int32 dest, Int32 host, ref ...
- GUI程序原理分析
1,Qt 是一套跨平台的程序设计库,这套程序设计库主要用于 GUI 方面的程序设计开发,所以本系列博文主要是利用C++介绍 GUI 程序设计技术: 2,命令行应用程序: 1,命令行应用程序的特点(Co ...
- SSM框架的常用注解整理
一.mybatis 1 配置一对多查询和多对多查询的注解方式映射关系: @Results:声明映射关系的配置 Value属性接收 @Result的数组 @Result:配置映射关系 id属性(b ...
- Xcode 运行时异常
一:unable to boot the ios simulator:模拟器异常 1.在添加了新的xcode版本调试包时,出现旧版模拟器不支持的情况,关闭旧版模拟器,重新运行 二:Could not ...