/// <summary> /// 构造函数 /// </summary> /// <remarks>主要用于发送封装数据</remarks> public DataFrame(string content) { _content = Encoding.UTF8.GetBytes(content); int length = _content.Length; if (length < 126) { _extend = new byte[0]; _header = new DataFrameHeader(true, false, false, false, OpCode.Text, false, length); } else if (length < 65536) { _extend = new byte[2]; _header = new DataFrameHeader(true, false, false, false, OpCode.Text, false, 126); _extend[0] = (byte)(length / 256); _extend[1] = (byte)(length % 256); } else { _extend = new byte[8]; _header = new DataFrameHeader(true, false, false, false, OpCode.Text, false, 127); int left = length; int unit = 256; for (int i = 7; i > 1; i--) { _extend[i] = (byte)(left % unit); left = left / unit; if (left == 0) break; } } }
/// <summary> /// 构造函数 /// </summary> /// <remarks>主要用于解析接收数据</remarks> public DataFrame(byte[] buffer) { //格式化帧头 _header = new DataFrameHeader(buffer); //填充扩展长度字节 if (_header.Length == 126) { _extend = new byte[2]; Buffer.BlockCopy(buffer, 2, _extend, 0, 2); } else if (_header.Length == 127) { _extend = new byte[8]; Buffer.BlockCopy(buffer, 2, _extend, 0, 8); } //是否有掩码 if (_header.HasMask) { _mask = new byte[4]; Buffer.BlockCopy(buffer, _extend.Length + 2, _mask, 0, 4); } //消息体 if (_extend.Length == 0) { _content = new byte[_header.Length]; Buffer.BlockCopy(buffer, _extend.Length + _mask.Length + 2 , _content, 0, _content.Length); } else if (_extend.Length == 2) { _content = new byte[Convert.ToUInt16(_extend)]; Buffer.BlockCopy(buffer, _extend.Length + _mask.Length + 2, _content, 0, _content.Length); } else { _content = new byte[Convert.ToUInt64(Common.CopyArrayData(buffer, 2, 8))]; Buffer.BlockCopy(buffer, _extend.Length + _mask.Length + 2, _content, 0, _content.Length); } //如果有掩码,则需要还原原始数据 if (_header.HasMask) _content = Mask(_content, _mask); }