Encuentra la dirección IP de un objeto remoto en .net remoting
Pregunta
Tengo una aplicación cliente-servidor que usa .net remoting. Los clientes están en una LAN y no sé su ubicación de antemano.
A veces realizamos transferencias de archivos y, como optimización, quiero determinar si un cliente está de hecho en la misma máquina que el servidor (es muy posible). En este caso, solo necesito hacer un File.Copy.
Digamos que un cliente llama al método remoto:
RemoteFile server.GetFile (ruta de la cadena);
¿cómo puedo determinar si el cliente (el solicitante) está en la misma máquina?
Solución
Si conoce la dirección IP para el servidor desde el cual está llamando el método remoto, puede usar este método para saber si está en la misma máquina o no:
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());
}
Si no conoce la dirección IP de su servidor remoto, puede obtenerla fácilmente usando el nombre de host del servidor de esta manera:
Dns.GetHostAddresses("remote_host_address")
Esto devuelve una dirección IP [], que incluye todas las direcciones resueltas para ese host.