/// <summary> /// 获取一条可用数据,返回值标记是否有数据 /// </summary> /// <param name="tmpSocketData"></param> /// <returns></returns> public bool GetData(out sSocketData tmpSocketData) { tmpSocketData = new sSocketData(); if (buffLength <= 0) { UpdateDataLength(); } if (buffLength > 0 && curBuffPosition >= buffLength) { tmpSocketData.buffLength = buffLength; tmpSocketData.dataLength = dataLength; tmpSocketData.protocal = protocal; tmpSocketData.data = new byte[dataLength]; Array.Copy(buff, Constants.HEAD_LEN, tmpSocketData.data, 0, dataLength); curBuffPosition -= buffLength; byte[] tmpBuff = new byte[curBuffPosition < minBuffLen ? minBuffLen : curBuffPosition]; Array.Copy(buff, buffLength, tmpBuff, 0, curBuffPosition); buff = tmpBuff; buffLength = 0; dataLength = 0; protocal = 0; return(true); } return(false); }
/// <summary> /// 数据转网络结构 /// </summary> /// <param name="_protocalType"></param> /// <param name="data"></param> /// <returns></returns> private sSocketData BytesToSocketData(int protocol, byte[] data) { sSocketData tmpSocketData = new sSocketData(); tmpSocketData.buffLength = Constants.HEAD_LEN + data.Length; tmpSocketData.protocal = protocol; tmpSocketData.dataLength = data.Length; tmpSocketData.data = data; return(tmpSocketData); }
/// <summary> /// 网络结构转数据 /// </summary> /// <param name="tmpSocketData"></param> /// <returns></returns> private byte[] SocketDataToBytes(sSocketData tmpSocketData) { byte[] tmpBuff = new byte[tmpSocketData.buffLength]; byte[] tmpBuffLength = BitConverter.GetBytes(tmpSocketData.buffLength); byte[] tmpDataLenght = BitConverter.GetBytes(tmpSocketData.protocal); Array.Copy(tmpBuffLength, 0, tmpBuff, 0, Constants.HEAD_DATA_LEN); //缓存总长度 Array.Copy(tmpDataLenght, 0, tmpBuff, Constants.HEAD_DATA_LEN, Constants.HEAD_TYPE_LEN); //协议类型 Array.Copy(tmpSocketData.data, 0, tmpBuff, Constants.HEAD_LEN, tmpSocketData.dataLength); //协议数据 return(tmpBuff); }