public byte[] Parser(byte[] source) { byte[] response = new byte[0]; byte[] buffer = ProtocolUtil.UnTransfer(source); MsgId msgId = ProtocolUtil.BytesToMsgId(buffer, 0); Int16 data_len = BitConverter.ToInt16(buffer, 2); data_len = IPAddress.NetworkToHostOrder(data_len); string terminalId = ProtocolUtil.BcdToString(buffer, 4, 6); Int16 serialNo = BitConverter.ToInt16(buffer, 10); serialNo = IPAddress.NetworkToHostOrder(serialNo); byte xor = buffer[12 + data_len]; //数据体 byte[] data = new byte[data_len]; Array.Copy(buffer, 12, data, 0, data_len); byte calcXor = ProtocolUtil.XorByByte(buffer, 0, 12 + data_len); TcpFrameBean frameBean = new TcpFrameBean(); frameBean.DataBody = data; frameBean.SerialNo = serialNo; frameBean.TerminalId = terminalId; frameBean.MsgId = msgId; frameBean.DeviceType = (DeviceType)buffer[4]; if (xor != calcXor) { logger.Error("校验码不符合预期:" + ProtocolUtil.BytesToString(source)); frameBean.AppendErrorMsg("校验码不符合预期"); byte[] d = MakerTCPFrame.GetInstance().Make8001Frame(serialNo, MsgId.X0001, CommResponse.MistakeMsg); response = MakerTCPFrame.GetInstance().PackData(MsgId.X8001, frameBean.TerminalId, d); return(response); } switch (msgId) { case MsgId.X0001: //设备通用应答 break; case MsgId.X0002: //心跳OK logger.Info("收到心跳:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到心跳:" + ProtocolUtil.BytesToString(source)); HandleHeartBeat(ref response, frameBean); break; case MsgId.X0008: //开始训练 logger.Info("收到开始训练请求:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到开始训练请求:" + ProtocolUtil.BytesToString(source)); HandleStartPrictice(ref response, frameBean); break; case MsgId.X0009: //训练结果上报 logger.Info("收到训练结果上报:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到训练结果上报:" + ProtocolUtil.BytesToString(source)); byte[] dd = MakerTCPFrame.GetInstance().Make8001Frame(serialNo, MsgId.X0001, CommResponse.Success); response = MakerTCPFrame.GetInstance().PackData(MsgId.X8001, frameBean.TerminalId, dd); HandlePricticeResult(ref response, frameBean); break; case MsgId.X000A: //请求使用者信息 logger.Info("收到请求使用者信息:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到请求使用者信息:" + ProtocolUtil.BytesToString(source)); HandleRequestUserInfo(ref response, frameBean); break; case MsgId.X0007: //请求照片数据OK logger.Info("收到请求照片数据OK:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到请求照片数据OK:" + ProtocolUtil.BytesToString(source)); HandleRequestImageData(ref response, frameBean); break; default: logger.Error("收到未知消息:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到未知消息:" + ProtocolUtil.BytesToString(source)); frameBean.AppendErrorMsg("未知的消息ID"); byte[] d = MakerTCPFrame.GetInstance().Make8001Frame(serialNo, MsgId.X0001, CommResponse.UnSupport); response = MakerTCPFrame.GetInstance().PackData(MsgId.X8001, frameBean.TerminalId, d); break; } logger.Info("响应的报文:" + ProtocolUtil.BytesToString(response)); WriteLogFile("响应的报文:" + ProtocolUtil.BytesToString(response)); return(response); }