/*
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端)的更多相关文章

  1. 利用WebSocket传输数组或者Blob的方案

    最近在利用Html5的WebSocket进行即时通讯,一点小心得,大家一起讨论吧 首先把WebSocket的协议网址和WebSocket API网址给大家: 协议:http://tools.ietf. ...

  2. UDP也需要现有Server端,然后再有Client端

    UDP编程: DatagramSocket(邮递员):对应数据报的Socket概念,不需要创建两个socket,不可使用输入输出流. DatagramPacket(信件):数据包,是UDP下进行传输数 ...

  3. Linux下的C Socket编程 -- 简介与client端的处理

    Linux下的C Socket编程(一) 介绍 Socket是进程间通信的方式之一,是进程间的通信.这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上.只要他们之间建立起了sock ...

  4. Python自动化之rabbitmq rpc client端代码分析(原创)

    RPC调用client端解析 import pika import uuid # 建立连接 class FibonacciRpcClient(object): def __init__(self): ...

  5. 用C#基于WCF创建TCP的Service供Client端调用

    本文将详细讲解用C#基于WCF创建TCP的Service供Client端调用的详细过程 1):首先创建一个Windows Service的工程 2):生成的代码工程结构如下所示 3):我们将Servi ...

  6. 从零开始学习Node.js例子四 多页面实现数学运算 续二(client端和server端)

    1.server端 支持数学运算的服务器,服务器的返回结果用json对象表示. math-server.js //通过监听3000端口使其作为Math Wizard的后台程序 var math = r ...

  7. Zookeeper全解析——Client端(转)

    Zookeeper的Client直接与用户打交道,是我们使用Zookeeper的interface.了解ZK Client的结构和工作原理有利于我们合理的使用ZK,并能在使用中更早的发现问题.本文将在 ...

  8. JDE报表开发笔记(Client端导出Excel乱码)

    之前导出Excel时没发生任何问题, Client端PL/SQL字符集为UTF-8 Oracle JDE E910字符集为UTF-8 解决方式:添加指定用户的字符集(上图即为修改后的用户字符集) 角色 ...

  9. JS读取client端的文件的代码片段

    JS读取client端的文件内容的代码片段 if(window.FileReader){ var html5file = this.pipeDetailFileUpLoader._files[0]; ...

随机推荐

  1. vue项目中,无需打包而动态更改背景图以及标题

    1.背景 今天,项目经理对已完成的项目提出了一个需求,即项目的基础功能目前针对于各个基层法院都适用,而对于不同的法院,我们每次都需要前端研发来更改所属法院的法院名称以及背景图,这样对于演示者来说是非常 ...

  2. Nginx日志监控 使用 goaccess查看nginx日志

    nginx日志监控 yum install goaccess   安装使用教程 goaccess access.log -o ../html/report.html --real-time-html ...

  3. C/C++ 内存模型

    C分为四个区:堆,栈,静态全局变量区,常量区 C++内存分为5个区域(堆栈全常代 ): 堆 heap : 由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete) ...

  4. Docker 容器(container)及资源限制

    Container: 既然container是由image运行起来的,那么是否可以理解为container和image有某种关系?先来看张图: 其实可以理解为container只是基于image之后的 ...

  5. c语言中字符串跨行书写的问题

    字符串常量定义时的换行问题     如果我们在一行代码的行尾放置一个反斜杠,c语言编译器会忽略行尾的换行符,而把下一行的内容也算作是本行的内容.这里反斜杠起到了续行的作用.        如果我们不使 ...

  6. 用Java构建一个简单的WebSocket聊天室

    前言 首先对于一个简单的聊天室,大家应该都有一定的概念了,这里我们省略用户模块的讲解,而是单纯的先说说聊天室的几个功能:自我对话.好友交流.群聊.离线消息等. 今天我们要做的demo就能帮我们做到这一 ...

  7. python查询mysql中是否存在某张表(传参)

    客户端输入了表的名字,服务端判断表是否存在. 参考:https://blog.csdn.net/qq_36523839/article/details/80639297 需要导入re模块: impor ...

  8. wpf中文本框只能输入整数

    private void txtBarCodeNum_KeyUp(object sender, KeyEventArgs e) { TxtInt(sender as TextBox); } priva ...

  9. [转载]MAC、IP头、TCP头、UDP头帧格式、详解

    原文地址:MAC.IP头.TCP头.UDP头帧格式.详解作者:iTudu 转自:http://zoufengfu168.blog.163.com/blog/static/546105520099133 ...

  10. /proc/sys/fs/file-max

    Linux的/proc/sys/fs/file-max决定了当前内核可以打开的最大的文件句柄数. 查看当前的值: cat /proc/sys/fs/file-max 这个值在kernel的文档里是这样 ...