private Queue queueTCPCacheReceived;
private Thread threadTCPCacheReceived;
static System.Threading.Timer Timer2 ;
private void ReceiveInformation2(Object state)//定时器用于接收数据
{
try
{
byte[] readBuffer = new byte[sock.ReceiveBufferSize];
int count = sock.Receive(readBuffer);
lock (queueTCPCacheReceived.SyncRoot)
{
for (int i = 0; i < count; i++)
{
queueTCPCacheReceived.Enqueue(readBuffer[i]);
}
}
}
catch (Exception ex)
{
string EM = ErrorMessage(ex);
timer1.Enabled = false;//UI停止更新
Timer2.Change(Timeout.Infinite, Timeout.Infinite);
sock.Close();
MessageBox.Show(EM, "错误");
return;
}
}
Timer2.Change(0, Timeout.Infinite);
}
private void ThreadTCPCacheReceivedFunction()
{
List<byte> listData = new List<byte>();
while (sock != null && sock.Connected)
{
int cacheLength = queueTCPCacheReceived.Count;
Console.WriteLine(cacheLength.ToString());
if (cacheLength > 0)
{
lock (queueTCPCacheReceived.SyncRoot)
{
for (int i = 0; i < cacheLength; i++)
{
if (listData.Count == 0)
{
if ((byte)queueTCPCacheReceived.Dequeue() == 0x55 && (byte)queueTCPCacheReceived.Dequeue() == 0x00)
{
listData.Add(0x55);
listData.Add(0x00);
}
}
else if (listData.Count > 0)
{
listData.Add((byte)queueTCPCacheReceived.Dequeue());
}
if (listData.Count == 896)
{
lock (queueTCPCacheReceived.SyncRoot)
{
byte[] byteData =listData.ToArray();
if (byteData[0] == 85 && byteData[895] == 238)//首尾验证
{
if (nlink_linktrack_anchor_frame0.unpackAnchorFrame0Data(byteData, byteData.Length))
{
ErrorCount = 0;
}
}
}
listData.Clear();
}
}
}
}
}
queueTCPCacheReceived.Clear();
}