我正在處理Serialport。我面臨一個新問題,即一旦我收到數據,我的數據就不完整。如何檢查我的數據是否完整,然後處理它們,如果沒有,請不要處理它們?c#中的SerialPort,數據接收不完整消息
這裏是我的數據接收和發送我的功能:
private void Send(byte[] cmd)
{
bResponse = new byte[0];
Write(cmd);
}
void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int iCount = comPort.BytesToRead;
byte[] bBuffer = new byte[iCount];
comPort.Read(bBuffer, 0, iCount)
if (bBuffer.Length == 1 && bBuffer[0] == ACK)
Write(new byte[] { ENQ });
else if (bBuffer.Length == 1 && bBuffer[0] == NAK)
{
Debug.WriteLine("Incomplete Message detected!");
}
else
{
bResponse = bResponse.Concat(bBuffer).ToArray();
rResponse = Decode(bResponse);
Write(new byte[] { ACK });
}
}
我知道自己的數據了幾包被接收,我需要等待,直到響應完成,但我不知道基於上面的代碼。我應該如何檢查數據是否完整以確定是否等待? (P.S:收到的響應的大小各不相同。)
請確定:您的數據何時完成?你能確定(在程序中)某個數據塊是否是一個完整的消息嗎? –
@DasKrümelmonster我會在其他函數調用中檢查BCC解碼,如果BCC正確,則表示它的消息完整 – PublicAffair