diff --git a/server/src/Peripherals/CameraClient.cs b/server/src/Peripherals/CameraClient.cs index ef65c6b..dc63b4a 100644 --- a/server/src/Peripherals/CameraClient.cs +++ b/server/src/Peripherals/CameraClient.cs @@ -42,14 +42,14 @@ class Camera public async ValueTask> ReadFrame() { // 清除UDP服务器接收缓冲区 - await MsgBus.UDPServer.ClearUDPData(this.address, 3); + await MsgBus.UDPServer.ClearUDPData(this.address, 2); logger.Trace($"Clear up udp server {this.address} receive data"); // 使用UDPClientPool读取图像帧数据 var result = await UDPClientPool.ReadAddrBytes( this.ep, - 3, // taskID + 2, // taskID CameraAddr.Base, (int)CameraAddr.FrameLength, this.timeout); diff --git a/server/src/UdpClientPool.cs b/server/src/UdpClientPool.cs index 57e923a..9872408 100644 --- a/server/src/UdpClientPool.cs +++ b/server/src/UdpClientPool.cs @@ -323,7 +323,6 @@ public class UDPClientPool opts.BurstType = BurstType.FixedBurst; opts.CommandID = Convert.ToByte(taskID); - opts.Address = devAddr; opts.IsWrite = false; // Check Msg Bus @@ -332,8 +331,8 @@ public class UDPClientPool // Calculate read times and segments var maxBytesPerRead = 256 * (32 / 8); // 1024 bytes per read - var hasRest = dataLength % maxBytesPerRead != 0; - var readTimes = hasRest ? + var restBytes = dataLength % maxBytesPerRead; + var readTimes = restBytes != 0 ? dataLength / maxBytesPerRead + 1 : dataLength / maxBytesPerRead; @@ -341,9 +340,7 @@ public class UDPClientPool { // Calculate current segment size var isLastSegment = i == readTimes - 1; - var currentSegmentSize = isLastSegment && hasRest ? - dataLength % maxBytesPerRead : - maxBytesPerRead; + var currentSegmentSize = isLastSegment ? restBytes : maxBytesPerRead; // Set burst length (in 32-bit words) opts.BurstLength = (byte)(currentSegmentSize / 4 - 1);