zoukankan      html  css  js  c++  java
  • [手游新项目历程]第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;


  • 相关阅读:
    Volatile关键字
    ThreadPoolExecutor线程池基本原理及使用
    HashMap线程不安全源码解析(1.7 + 1.8)
    SpringBoot+ajax+formData实现图片上传和回显
    BloomFilter
    POST和GET
    快手电话面试
    Apache SSI 远程命令执行漏洞
    SYSTEM--服务器提权
    封神台靶场练习(2)
  • 原文地址:https://www.cnblogs.com/byfei/p/14104298.html
Copyright © 2011-2022 走看看