[手游新项目历程]第8天-websocket打包

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;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值