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) { int contentLength = _extend[0] * 256 + _extend[1]; Content = new byte[contentLength]; Buffer.BlockCopy(buffer, _extend.Length + _mask.Length + 2, Content, 0, contentLength > 1024 * 100 ? 1024 * 100 : contentLength); } else { long len = 0; int n = 1; for (int i = 7; i >= 0; i--) { len += _extend[i] * n; n *= 256; } Content = new byte[len]; Buffer.BlockCopy(buffer, _extend.Length + _mask.Length + 2, Content, 0, Content.Length); } if (_header.HasMask) { Content = Mask(Content, _mask); } }
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, 1, false, length); // _header = new DataFrameHeader(true, false, false, false, frameType, false, length);//1 传输文本2 传输二进制 } else if (length < 65536) { _extend = new byte[2]; _header = new DataFrameHeader(true, false, false, false, 1, false, 126); //_header = new DataFrameHeader(true, false, false, false, frameType, false, 126);//1 传输文本2 传输二进制 _extend[0] = (byte)(length / 256); _extend[1] = (byte)(length % 256); } else { _extend = new byte[8]; _header = new DataFrameHeader(true, false, false, false, 1, false, 127); //_header = new DataFrameHeader(true, false, false, false, frameType, false, 127);//1 传输文本2 传输二进制 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; } } } }