diff --git a/server/src/UdpClientPool.cs b/server/src/UdpClientPool.cs index 6d2b415..de671b8 100644 --- a/server/src/UdpClientPool.cs +++ b/server/src/UdpClientPool.cs @@ -465,7 +465,7 @@ public class UDPClientPool // Send address packages in batches of 128, control outstanding int sentCount = 0; var startTime = DateTime.Now; - const int batchSize = 128; + const int batchSize = 64; while (sentCount < pkgList.Count) { var elapsed = DateTime.Now - startTime; @@ -487,11 +487,12 @@ public class UDPClientPool var ret = await UDPClientPool.SendMultiAddrPackAsync(endPoint, batchPkgs); if (!ret) return new(new Exception($"Send address package batch failed at segment {sentCount}!")); sentCount += batchSend; + // Task.Delay(1).Wait(); } // Wait until enough data is received or timeout startTime = DateTime.Now; - List? udpDatas = null; + var udpDatas = new List(); while (true) { var elapsed = DateTime.Now - startTime; @@ -504,23 +505,23 @@ public class UDPClientPool var dataArr = await MsgBus.UDPServer.FindDataArrayAsync(endPoint.Address.ToString(), taskID, timeleft); if (dataArr.HasValue) { - udpDatas = dataArr.Value; + udpDatas.AddRange(dataArr.Value); break; } } } - if (udpDatas is null || udpDatas.Count < readTimes) - return new(new Exception($"Expected {readTimes} UDP data packets but received {udpDatas?.Count ?? 0}")); + if (udpDatas.Count < readTimes) + return new(new Exception($"Expected {readTimes} UDP data packets but received {udpDatas.Count}")); // Collect and validate all received data for (var i = 0; i < udpDatas.Count; i++) { var bytes = udpDatas[i].Data; var expectedLen = ((pkgList[i].Options.BurstLength + 1) * 4); - if (bytes.Length != expectedLen) - return new(new Exception($"Expected {expectedLen} bytes but received {bytes.Length} bytes at segment {i}")); - resultData.AddRange(bytes); + if ((bytes.Length - 4) != expectedLen) + return new(new Exception($"Expected {expectedLen} bytes but received {bytes.Length - 4} bytes at segment {i}")); + resultData.AddRange(bytes[4..]); } // Validate total data length diff --git a/server/src/UdpServer.cs b/server/src/UdpServer.cs index fb4bd00..88eeac5 100644 --- a/server/src/UdpServer.cs +++ b/server/src/UdpServer.cs @@ -367,15 +367,17 @@ public class UDPServer return retPack.Value; } + static int ReceiveHandleCcount = 0; private void ReceiveHandler(IAsyncResult res) { - logger.Trace("Enter handler"); var remoteEP = new IPEndPoint(IPAddress.Any, listenPort); byte[] bytes = listener.EndReceive(res, ref remoteEP); // 提前开始接收下一个包 listener.BeginReceive(new AsyncCallback(ReceiveHandler), null); + logger.Debug($"Test ReceiveHandler Count = {ReceiveHandleCcount}"); + ReceiveHandleCcount++; // Handle RemoteEP if (remoteEP is null) @@ -431,7 +433,7 @@ public class UDPServer udpData.TryGetValue($"{remoteAddress}-{taskID}", out var dataQueue)) { dataQueue.Enqueue(data); - logger.Trace("Receive data from old client"); + logger.Debug($"Test Lock dataQueue.Count = {dataQueue.Count}"); } else {