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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top