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]; ...
随机推荐
- 7.安装pycharm----导入Nmap模块----netcat反向shell----metasploitable靶机环境
安装pycharm www.jetbrains.com/pycharm/ tar -zxvf p补全 ls cd p补全 ls cd bin ls ./pycharm.sh 新建项目 pythonRo ...
- LeetCode链表简单题
一.21合并两个有序链表 代码如下: class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNod ...
- 20191118 Spring Boot官方文档学习(4.8)
4.8. RSocket RSocket参考 RSocket是用于字节流传输的二进制协议.它通过单个连接传递的异步消息来启用对称交互模型. Spring框架的spring-messaging模块在客户 ...
- netcat命令用法
1,端口扫描nc -z -v -n 172.31.100.7 21-25 2,聊天Server:nc -l 1567Client:nc 172.31.100.7 1567 3,文件传输Server:n ...
- “EndExecuteNonQuery”方法没有任何重载采用“0”个参数
EndExecuteNonQuery需要参数IAsyncResult asyncResult myCmd.ExecuteNonQuery();//执行 ExecuteNonQuery 返回受影响行数
- Java Springboot 根据图片链接生成图片下载链接 及 多个图片打包zip下载链接
现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式. 现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载.由于前端存在跨域问题, ...
- HDU1181 题解(Floyd最短路)
题面: 变形课 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Subm ...
- mysql 修改表字段默认值
alter table 表名 alter column 字段名 drop default; (若本身存在默认值,则先删除) alter table 表名 alter column 字段名 set de ...
- Java关于继承中的内存分配
1.定义 super:当前对象的父类对象 this :当前对象,谁调用this所在的方法,this就是哪一个对象. 2.内存分析 另一个例子: public s ...
- react native 在vscode上运行
1.在用react-native init xxx 创建rn项目之后,在Android目录中创建local.properties文件 =后面接上sdk地址 2.react-native start 命 ...