TCP处理传入数据的难度

时间:2014-04-28 15:48:03

标签: c# multithreading sockets tcp

我使用C#线程来处理传入的TCP数据。

数据具有预定义的格式,例如

十六进制: A1 B1 01 03数据... 0C 0E

  • 其中A1 B1要同步字节(总是相同)
  • 列表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包。然后缓冲区中的同步字节位置不同。

我想过一个环形缓冲区,其中写入数据并不断搜索同步字节。

实施它的最佳方法是什么? 或者您有其他建议吗?

电贺, 岸堤

0 个答案:

没有答案