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;