代码之家  ›  专栏  ›  技术社区  ›  Bogdan Gavril MSFT

在.NET远程处理中查找远程对象的IP地址

  •  1
  • Bogdan Gavril MSFT  · 技术社区  · 16 年前

    我有一个使用.NET远程处理的客户机-服务器应用程序。客户在局域网中,我不知道他们的位置。

    有时我们进行文件传输,作为一种优化,我想确定客户机实际上是否与服务器在同一台机器上(这是完全可能的)。在这种情况下,我只需要做一个file.copy。

    假设客户机调用远程方法:

    远程文件服务器.getfile(字符串路径);

    如何确定客户机(请求者)是否在同一台计算机上?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Mel Green    16 年前

    如果您知道从远程方法调用的服务器的IP地址,可以使用此方法来判断您是否在同一台计算机上:

    using System.Net;
    
    private bool CheckIfServer(IPAddress serverIP)
    {
        // Get all addresses assigned to this machine
        List<IPAddress> ipAddresses = new List<IPAddress>();
        ipAddresses.AddRange(Dns.GetHostAddresses(Dns.GetHostName()));
    
        // If desirable, also include the loopback adapter
        ipAddresses.Add(IPAddress.Loopback);
    
        // Detect if this machine contains the IP for the remote server
        // Note: This uses a Lambda Expression, which is only available .Net 3 or later
        return ipAddresses.Exists(i => i.ToString() == serverIP.ToString());
    }
    

    如果您不知道远程服务器的IP地址,您可以使用服务器的主机名轻松获取它,如下所示:

    Dns.GetHostAddresses("remote_host_address")
    

    这将返回一个IP地址[],其中包括该主机的所有已解析地址。