[手游新项目历程]第8天-websocket打包
2023-09-14 09:06:31 时间
function encodeDataFrame(e)
{
var s = [], --头的数据
o=new Buffer(e.PayloadData), --包的数据
l=o.length; --数据长度l 不是1
s.push((e.FIN<<7)+e.Opcode); --输入第一个字节 129
--输入第二个字节,判断它的长度并放入相应的后续长度消息
--永远不要写掩码
if(l<126)
s.push(l);
else if(l<0x10000) --65536
s.push(126,(l&0xFF00)>>8,l&0xFF);() --(126, (l&255)>>8, l&255)
else s.push(
127, 0,0,0,0, --8字节数据,前4字节一般没用留空
(l&0xFF000000)>>24,(l&0xFF0000)>>16,(l&0xFF00)>>8,l&0xFF
);
return Buffer.concat([new Buffer(s),o]); --返回头部分和数据部分的合并缓冲区
};
--//给客户端发送个数据
o.write(encodeDataFrame({FIN:1, Opcode:1, PayloadData:"次碳酸钴"}));
NodeJs基本语法和类型 点击打开链接
C++
int nSize = strData.size();
if(size != 0)
{
nSize = size;
}
unsigned __int64 payloadSize = nSize;
/*
int expectedSize = payloadSize + 1; //统计包的长度
if(payloadSize <= 125 && payloadSize <= 65535 )
expectedSize += 1;
else if(payloadSize > 125 && payloadSize <= 65535)
expectedSize += 3;
else
expectedSize += 9;
if (expectedSize > buffer.getRemainingSize())
return Protocol::eInsufficientBuffer;
*/
//create the flags byte
char payloadFlags = 129;
buffer.WriteByte(payloadFlags);
int expectedSize = payloadSize + 1; //统计包的长度
//create the length byte
if (payloadSize <= 125)
{
char basicSize = payloadSize;
buffer.WriteByte(basicSize);
expectedSize += 1;
}
else if (/*payloadSize > 125 &&*/ payloadSize <= 65535)//by byfei 2017/02/20
{
char basicSize = 126;
char len[2];
len[0] = ( payloadSize >> 8 ) & 255;
len[1] = ( payloadSize ) & 255;
buffer.WriteByte(len[0]);
buffer.WriteByte(len[1]);
buffer.WriteByte(basicSize);
expectedSize += 3;
}
else
{
char basicSize = 127;
char len[8];
len[0] = ( payloadSize >> 56 ) & 255;
len[1] = ( payloadSize >> 48 ) & 255;
len[2] = ( payloadSize >> 40 ) & 255;
len[3] = ( payloadSize >> 32 ) & 255;
len[4] = ( payloadSize >> 24 ) & 255;
len[5] = ( payloadSize >> 16 ) & 255;
len[6] = ( payloadSize >> 8 ) & 255;
len[7] = ( payloadSize ) & 255;
buffer.WriteByte(basicSize);
buffer.Append(len, 8);
expectedSize += 9;
}
//buffer.Append((char*)strData.c_str(), size);
if(size != 0)
{
buffer.Append(strData,nSize);
}
else
{
buffer.Append((char*)strData.c_str(), nSize);
}
nWrittenBytes = expectedSize;
相关文章
- Java项目毕业设计:基于springboot+vue的电影视频网站系统「建议收藏」
- 玩转 Spring Boot 应用篇(项目打包、发布)(二十)
- pycharm打包python项目_Python怎么打包
- VUE打包图片加载失败问题
- 将java或javaweb项目打包为jar包或war包[通俗易懂]
- 工程化之webpack打包过程
- IDEA打包maven项目同时带上依赖
- 关于一个打包下载的需求
- springboot项目引入第三方jar后打包运行时找不到类
- python 打包pyqt6
- AppStore 打包上传后提示“二进制文件无效” 的解决方法
- SpringBoot 多模块项目打包部署保姆级教程
- 不用Mac也可以将打包好的ipa上架App
- C/C++ Qt 编译打包项目
- Java(SpringBoot)项目打包(构建)成Docker镜像的几种方式
- python将GUI项目打包成exe文件
- Docker+Nginx打包部署前后端分离项目
- IDEA: 如何导入项目模块 以及 将 Java程序打包 JAR 详细步骤
- HBuilder打包简单项目(vue项目)APP的教材
- 【Unity3D】Android 打包 ② ( Android 编译选项 | Android 工程设置 | 配置基本信息 | 配置不同分辨率图标 | 配置启动动画 | 其它设置 )
- 用HBuilder打包简单项目(vue项目)APP的步骤
- Linux文件夹打包命令快速入门(linux文件夹打包命令)
- Linux压缩文件打包命令:完全指南(linux打包压缩命令)
- Linux系统下QT项目打包实战(linuxqt打包)
- 一步到位:轻松打包安装MySQL(打包安装mysql)