fix: 使用互斥锁确保数据写入的顺序性
This commit is contained in:
parent
c9fc6961fa
commit
6500c1ce2d
|
@ -346,25 +346,28 @@ public class UDPServer
|
||||||
return retPack.Value;
|
return retPack.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ReceiveHandler(byte[] data, IPEndPoint endPoint)
|
private async Task ReceiveHandler(byte[] data, IPEndPoint endPoint, DateTime time)
|
||||||
{
|
{
|
||||||
// Handle RemoteEP
|
// 异步锁保护 udpData
|
||||||
if (endPoint is null)
|
await Task.Run(() =>
|
||||||
{
|
{
|
||||||
logger.Debug($"Receive Data from Unknown at {DateTime.Now.ToString()}:");
|
lock (udpData)
|
||||||
logger.Debug($" Original Data : {BitConverter.ToString(data).Replace("-", " ")}");
|
{
|
||||||
return;
|
// Handle RemoteEP
|
||||||
}
|
if (endPoint is null)
|
||||||
|
{
|
||||||
|
logger.Debug($"Receive Data from Unknown at {DateTime.Now.ToString()}:");
|
||||||
|
logger.Debug($" Original Data : {BitConverter.ToString(data).Replace("-", " ")}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 异步处理数据包
|
var udpDataObj = RecordUDPData(data, endPoint, time, Convert.ToInt32(data[1]));
|
||||||
Task.Run(() =>
|
PrintData(udpDataObj);
|
||||||
{
|
}
|
||||||
var udpData = RecordUDPData(data, endPoint, Convert.ToInt32(data[1]));
|
|
||||||
PrintData(udpData);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private UDPData RecordUDPData(byte[] bytes, IPEndPoint remoteEP, int taskID)
|
private UDPData RecordUDPData(byte[] bytes, IPEndPoint remoteEP, DateTime time, int taskID)
|
||||||
{
|
{
|
||||||
var remoteAddress = remoteEP.Address.ToString();
|
var remoteAddress = remoteEP.Address.ToString();
|
||||||
var remotePort = remoteEP.Port;
|
var remotePort = remoteEP.Port;
|
||||||
|
@ -374,7 +377,7 @@ public class UDPServer
|
||||||
Port = remotePort,
|
Port = remotePort,
|
||||||
TaskID = taskID,
|
TaskID = taskID,
|
||||||
Data = bytes,
|
Data = bytes,
|
||||||
DateTime = DateTime.Now,
|
DateTime = time,
|
||||||
HasRead = false,
|
HasRead = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -482,7 +485,7 @@ public class UDPServer
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
UdpReceiveResult result = await client.ReceiveAsync();
|
UdpReceiveResult result = await client.ReceiveAsync();
|
||||||
ReceiveHandler(result.Buffer, result.RemoteEndPoint);
|
ReceiveHandler(result.Buffer, result.RemoteEndPoint, DateTime.Now);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -510,6 +513,7 @@ public class UDPServer
|
||||||
item.Close();
|
item.Close();
|
||||||
}
|
}
|
||||||
this.isRunning = false;
|
this.isRunning = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue