From 6500c1ce2dd77dcecc151a8034d5e7dbbb156089 Mon Sep 17 00:00:00 2001 From: SikongJueluo Date: Mon, 14 Jul 2025 17:13:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=E4=BA=92=E6=96=A5?= =?UTF-8?q?=E9=94=81=E7=A1=AE=E4=BF=9D=E6=95=B0=E6=8D=AE=E5=86=99=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E9=A1=BA=E5=BA=8F=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/UdpServer.cs | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/server/src/UdpServer.cs b/server/src/UdpServer.cs index 1c89e01..3f4e915 100644 --- a/server/src/UdpServer.cs +++ b/server/src/UdpServer.cs @@ -346,25 +346,28 @@ public class UDPServer return retPack.Value; } - private void ReceiveHandler(byte[] data, IPEndPoint endPoint) + private async Task ReceiveHandler(byte[] data, IPEndPoint endPoint, DateTime time) { - // Handle RemoteEP - if (endPoint is null) + // 异步锁保护 udpData + await Task.Run(() => { - logger.Debug($"Receive Data from Unknown at {DateTime.Now.ToString()}:"); - logger.Debug($" Original Data : {BitConverter.ToString(data).Replace("-", " ")}"); - return; - } + lock (udpData) + { + // 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; + } - // 异步处理数据包 - Task.Run(() => - { - var udpData = RecordUDPData(data, endPoint, Convert.ToInt32(data[1])); - PrintData(udpData); + var udpDataObj = RecordUDPData(data, endPoint, time, Convert.ToInt32(data[1])); + PrintData(udpDataObj); + } }); } - 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 remotePort = remoteEP.Port; @@ -374,7 +377,7 @@ public class UDPServer Port = remotePort, TaskID = taskID, Data = bytes, - DateTime = DateTime.Now, + DateTime = time, HasRead = false, }; @@ -482,7 +485,7 @@ public class UDPServer try { UdpReceiveResult result = await client.ReceiveAsync(); - ReceiveHandler(result.Buffer, result.RemoteEndPoint); + ReceiveHandler(result.Buffer, result.RemoteEndPoint, DateTime.Now); } catch (Exception ex) { @@ -510,6 +513,7 @@ public class UDPServer item.Close(); } this.isRunning = false; + } }