Encontre o endereço IP de um objeto remoto no .NET Remoting
Pergunta
Eu tenho um aplicativo cliente-servidor que usa o .NET remoting. Os clientes estão em uma LAN e eu não conheço sua localização com antecedência.
Às vezes, arquivamos transferências e, como otimização, quero determinar se um cliente está de fato na mesma máquina que o servidor (é bem possível). Nesse caso, eu só preciso fazer um arquivo.copy.
Digamos que um cliente chama o método remoto:
RemoteFile Server.getFile (String Path);
Como posso determinar se o cliente (o solicitante) está na mesma máquina?
Solução
Se você conhece o endereço IP do servidor que chama o método remoto, pode usar esse método para saber se você está ou não na mesma máquina:
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());
}
Se você não conhece o iPaddress para o seu servidor remoto, pode obtê -lo facilmente usando o nome do host do servidor como este:
Dns.GetHostAddresses("remote_host_address")
Isso retorna um ipaddress [], que inclui todo o endereço resolvido para esse host.