fix: 修复获取主机ip错误的问题
This commit is contained in:
		@@ -153,7 +153,7 @@ public class NetConfigController : ControllerBase
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            var netConfig = new NetConfig(BOARD_IP, BOARD_PORT, 0);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            var hostIPResult = await netConfig.GetHostIP();
 | 
			
		||||
            var boardIPResult = await netConfig.GetBoardIP();
 | 
			
		||||
            var hostMACResult = await netConfig.GetHostMAC();
 | 
			
		||||
@@ -345,7 +345,8 @@ public class NetConfigController : ControllerBase
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            // 获取本机第一个有效的IPv4地址
 | 
			
		||||
            // 获取所有本机IPv4地址,并选择与实验板IP前三段相同的IP
 | 
			
		||||
            var boardIpSegments = BOARD_IP.Split('.').Take(3).ToArray();
 | 
			
		||||
            var ip = System.Net.NetworkInformation.NetworkInterface
 | 
			
		||||
                .GetAllNetworkInterfaces()
 | 
			
		||||
                .Where(nic => nic.OperationalStatus == System.Net.NetworkInformation.OperationalStatus.Up
 | 
			
		||||
@@ -353,7 +354,14 @@ public class NetConfigController : ControllerBase
 | 
			
		||||
                .SelectMany(nic => nic.GetIPProperties().UnicastAddresses)
 | 
			
		||||
                .Where(addr => addr.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
 | 
			
		||||
                .Select(addr => addr.Address)
 | 
			
		||||
                .FirstOrDefault();
 | 
			
		||||
                .FirstOrDefault(addr =>
 | 
			
		||||
                {
 | 
			
		||||
                    var segments = addr.ToString().Split('.');
 | 
			
		||||
                    return segments.Length == 4 &&
 | 
			
		||||
                           segments[0] == boardIpSegments[0] &&
 | 
			
		||||
                           segments[1] == boardIpSegments[1] &&
 | 
			
		||||
                           segments[2] == boardIpSegments[2];
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            if (ip == null)
 | 
			
		||||
                return StatusCode(StatusCodes.Status500InternalServerError, "无法获取本机IP地址");
 | 
			
		||||
 
 | 
			
		||||
@@ -54,6 +54,13 @@ public class NetConfig
 | 
			
		||||
        // 清除UDP服务器接收缓冲区
 | 
			
		||||
        MsgBus.UDPServer.ClearUDPData(this.address, this.taskID);
 | 
			
		||||
 | 
			
		||||
        // 刷新ARP
 | 
			
		||||
        var refrshRet = await Arp.UpdateArpEntryByPingAsync(this.address);
 | 
			
		||||
        if (!refrshRet)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Warn($"Refrash Arp failed, but maybe not a big deal.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var ipBytes = ip.GetAddressBytes();
 | 
			
		||||
 | 
			
		||||
        var ret = await UDPClientPool.WriteAddrSeq(this.ep, this.taskID, NetConfigAddr.HOST_IP, ipBytes, this.timeout);
 | 
			
		||||
@@ -98,6 +105,13 @@ public class NetConfig
 | 
			
		||||
        // 清除UDP服务器接收缓冲区
 | 
			
		||||
        MsgBus.UDPServer.ClearUDPData(this.address, this.taskID);
 | 
			
		||||
 | 
			
		||||
        // 刷新ARP
 | 
			
		||||
        var refrshRet = await Arp.UpdateArpEntryByPingAsync(this.address);
 | 
			
		||||
        if (!refrshRet)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Warn($"Refrash Arp failed, but maybe not a big deal.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var ipBytes = ip.GetAddressBytes();
 | 
			
		||||
 | 
			
		||||
        var ret = await UDPClientPool.WriteAddrSeq(this.ep, this.taskID, NetConfigAddr.BOARD_IP, ipBytes, this.timeout);
 | 
			
		||||
@@ -146,6 +160,13 @@ public class NetConfig
 | 
			
		||||
 | 
			
		||||
        // 清除UDP服务器接收缓冲区
 | 
			
		||||
        MsgBus.UDPServer.ClearUDPData(this.address, this.taskID);
 | 
			
		||||
        
 | 
			
		||||
        // 刷新ARP
 | 
			
		||||
        var refrshRet = await Arp.UpdateArpEntryByPingAsync(this.address);
 | 
			
		||||
        if (!refrshRet)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Warn($"Refrash Arp failed, but maybe not a big deal.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var ret = await UDPClientPool.WriteAddrSeq(this.ep, this.taskID, NetConfigAddr.HOST_MAC, macAddress, this.timeout);
 | 
			
		||||
        if (!ret.IsSuccessful)
 | 
			
		||||
@@ -193,6 +214,13 @@ public class NetConfig
 | 
			
		||||
 | 
			
		||||
        // 清除UDP服务器接收缓冲区
 | 
			
		||||
        MsgBus.UDPServer.ClearUDPData(this.address, this.taskID);
 | 
			
		||||
        
 | 
			
		||||
        // 刷新ARP
 | 
			
		||||
        var refrshRet = await Arp.UpdateArpEntryByPingAsync(this.address);
 | 
			
		||||
        if (!refrshRet)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Warn($"Refrash Arp failed, but maybe not a big deal.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var ret = await UDPClientPool.WriteAddrSeq(this.ep, this.taskID, NetConfigAddr.BOARD_MAC, macAddress, this.timeout);
 | 
			
		||||
        if (!ret.IsSuccessful)
 | 
			
		||||
@@ -234,6 +262,13 @@ public class NetConfig
 | 
			
		||||
    {
 | 
			
		||||
        // 清除UDP服务器接收缓冲区
 | 
			
		||||
        MsgBus.UDPServer.ClearUDPData(this.address, this.taskID);
 | 
			
		||||
        
 | 
			
		||||
        // 刷新ARP
 | 
			
		||||
        var refrshRet = await Arp.UpdateArpEntryByPingAsync(this.address);
 | 
			
		||||
        if (!refrshRet)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Warn($"Refrash Arp failed, but maybe not a big deal.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var ret = await UDPClientPool.ReadAddrSeq(this.ep, this.taskID, NetConfigAddr.HOST_IP, this.timeout);
 | 
			
		||||
        if (!ret.IsSuccessful)
 | 
			
		||||
@@ -261,6 +296,13 @@ public class NetConfig
 | 
			
		||||
    {
 | 
			
		||||
        // 清除UDP服务器接收缓冲区
 | 
			
		||||
        MsgBus.UDPServer.ClearUDPData(this.address, this.taskID);
 | 
			
		||||
        
 | 
			
		||||
        // 刷新ARP
 | 
			
		||||
        var refrshRet = await Arp.UpdateArpEntryByPingAsync(this.address);
 | 
			
		||||
        if (!refrshRet)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Warn($"Refrash Arp failed, but maybe not a big deal.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var ret = await UDPClientPool.ReadAddrSeq(this.ep, this.taskID, NetConfigAddr.BOARD_IP, this.timeout);
 | 
			
		||||
        if (!ret.IsSuccessful)
 | 
			
		||||
@@ -289,6 +331,13 @@ public class NetConfig
 | 
			
		||||
        // 清除UDP服务器接收缓冲区
 | 
			
		||||
        MsgBus.UDPServer.ClearUDPData(this.address, this.taskID);
 | 
			
		||||
 | 
			
		||||
        // 刷新ARP
 | 
			
		||||
        var refrshRet = await Arp.UpdateArpEntryByPingAsync(this.address);
 | 
			
		||||
        if (!refrshRet)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Warn($"Refrash Arp failed, but maybe not a big deal.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var ret = await UDPClientPool.ReadAddrSeq(this.ep, this.taskID, NetConfigAddr.HOST_MAC, this.timeout);
 | 
			
		||||
        if (!ret.IsSuccessful)
 | 
			
		||||
        {
 | 
			
		||||
@@ -315,6 +364,13 @@ public class NetConfig
 | 
			
		||||
    {
 | 
			
		||||
        // 清除UDP服务器接收缓冲区
 | 
			
		||||
        MsgBus.UDPServer.ClearUDPData(this.address, this.taskID);
 | 
			
		||||
        
 | 
			
		||||
        // 刷新ARP
 | 
			
		||||
        var refrshRet = await Arp.UpdateArpEntryByPingAsync(this.address);
 | 
			
		||||
        if (!refrshRet)
 | 
			
		||||
        {
 | 
			
		||||
            logger.Warn($"Refrash Arp failed, but maybe not a big deal.");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var ret = await UDPClientPool.ReadAddrSeq(this.ep, this.taskID, NetConfigAddr.BOARD_MAC, this.timeout);
 | 
			
		||||
        if (!ret.IsSuccessful)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user