public bool ProcessAndAddMessageToQueue(byte[] RecvBytes, TcpClient Client) { bool Re = false; bool CheckData = false; TcpMeasType MeasType = TcpMeasType.MEAS_TYPE_NONE; int MeasCode = 0; //根据制定的协议校验数据 //.......... CheckData = true; //分析数据,把数据添加到队列m_TcpMeas if (CheckData) { TcpMeas TempMeas = new TcpMeas(); TempMeas.Client = Client; TempMeas.MeasType = MeasType; TempMeas.MeasCode = MeasCode; TempMeas.Param = System.Text.Encoding.ASCII.GetBytes("Just for test !"); if (TempMeas != null) { m_RecvMeasQueue.Enqueue(TempMeas); } Re = true; } return(Re); }
public void ParseAndAddMessageToQueue(byte[] RecvBytes, int RecvCount, TcpClient Client, ref int parseCount, byte[] arrayParse) { //匹配比较数组, -1表示不需要比较,忽略 int[] arrayCompare = new int[CommunicationProtocol.MessageLength] { CommunicationProtocol.MessStartCode, CommunicationProtocol.MessVID1, CommunicationProtocol.MessVID2, -1, CommunicationProtocol.MessRightState, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, CommunicationProtocol.MessEndCode, }; for (int i = 0; i < RecvCount; i++) { if (arrayCompare[parseCount] != -1) //需要匹配 { if (RecvBytes[i] == arrayCompare[parseCount]) //相等 { arrayParse[parseCount++] = RecvBytes[i]; } else //不相等,复位计数器 { parseCount = 0; } } else //不需要比较,直接赋值,并更新计数器 { arrayParse[parseCount++] = RecvBytes[i]; } if (parseCount >= CommunicationProtocol.MessageLength) { parseCount = 0; //和校验 if (MyMath.CheckSum(arrayParse, CommunicationProtocol.MessageLength)) //分析数据,把数据添加到队列m_TcpMeas { TcpMeasType MeasType = TcpMeasType.MEAS_TYPE_CONTROLER_BOARD; byte MeasCode = arrayParse[CommunicationProtocol.MessageCommandIndex]; TcpMeas TempMeas = new TcpMeas(); if (TempMeas != null) { TempMeas.Client = Client; TempMeas.MeasType = MeasType; TempMeas.MeasCode = MeasCode; Array.Copy(arrayParse, TempMeas.Param, TempMeas.Param.Length); m_RecvMeasQueue.Enqueue(TempMeas); } Array.Clear(arrayParse, 0, arrayParse.Length); } else //校验和错误,则更新错误码后发回 { arrayParse[CommunicationProtocol.MessageStateIndex] = CommunicationProtocol.MessErrorState; arrayParse[CommunicationProtocol.MessageSumCheck] = 0x00; arrayParse[CommunicationProtocol.MessageSumCheck] = MyMath.CalculateSum(arrayParse, CommunicationProtocol.MessageLength); Client.GetStream().Write(arrayParse, 0, arrayParse.Length); } } } }
public void ParseAndAddMessageToQueue(byte[] RecvBytes, int RecvCount, TcpClient Client, ref int parseCount, byte[] arrayParse) { //匹配比较数组, -1表示不需要比较,忽略 int[] arrayCompare = new int[Message.MessageLength] { Message.MessStartCode, Message.MessVID1, Message.MessVID2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, Message.MessEndCode, }; for (int i = 0; i < RecvCount; i++) { if (arrayCompare[parseCount] != -1) //需要匹配 { if (RecvBytes[i] == arrayCompare[parseCount]) //相等 { arrayParse[parseCount++] = RecvBytes[i]; } else //不相等,复位计数器 { parseCount = 0; } } else //不需要比较,直接赋值,并更新计数器 { arrayParse[parseCount++] = RecvBytes[i]; } if (parseCount >= Message.MessageLength) { parseCount = 0; //和校验 if (MyMath.CheckSum(arrayParse, Message.MessageLength)) //分析数据,把数据添加到队列m_TcpMeas { TcpMeasType MeasType = TcpMeasType.MEAS_TYPE_ARM; byte MeasCode = arrayParse[Message.MessageCommandIndex]; TcpMeas TempMeas = new TcpMeas(); if (TempMeas != null) { TempMeas.Client = Client; TempMeas.MeasType = MeasType; TempMeas.MeasCode = MeasCode; Array.Copy(RecvBytes, TempMeas.Param, TempMeas.Param.Length); m_RecvMeasQueue.Enqueue(TempMeas); } } else //校验和错误,则更新错误码后发回 { arrayParse[Message.MessageStateIndex] = Message.MessErrorState; using (NetworkStream stream = Client.GetStream()) { stream.Write(arrayParse, 0, arrayParse.Length); } } } } }