我使用C#线程来处理传入的TCP数据。
数据具有预定义的格式,例如
十六进制: A1 B1 01 03数据... 0C 0E
如果此数据始终位于一个TCP包中,则现在处理数据时会出现问题。
while (connection.Available < 4)
{
}
before = connection.Available;
nStream.Read(Buffer_Sync_length, 0, 4);
after = connection.Available;
if ((Buffer_Sync_length[0] == 0xA1) && (Buffer_Sync_length[1] == 0xB1))
{
int length = Buffer_Sync_length[3];
while (connection.Available < (length + 2))
{ }
nStream.Read(inBuffer, 0, length+2);
Array.Clear(rec_Buffer, 0, inBuffer.Length);
Array.Copy(Buffer_Sync_length, rec_Buffer, 4);
Array.Copy(inBuffer, 0, rec_Buffer, 4, length);
transmit(rec_Buffer);
Array.Clear(Buffer_Sync_length, 0, Buffer_Sync_length.Length);
Array.Clear(inBuffer, 0, inBuffer.Length);
Array.Clear(rec_Buffer, 0, rec_Buffer.Length);
}
在一个帖子中运行。
但有时数据会随机分成TCP包。然后缓冲区中的同步字节位置不同。
我想过一个环形缓冲区,其中写入数据并不断搜索同步字节。
实施它的最佳方法是什么? 或者您有其他建议吗?
电贺, 岸堤