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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top