Domanda

Ho un'applicazione client-server che utilizza il telecomando .net. I client si trovano in una LAN e non conosco la loro posizione in anticipo.

A volte facciamo trasferimenti di file e come ottimizzazione voglio determinare se un client si trova effettivamente sulla stessa macchina del server (è del tutto possibile). In questo caso, ho solo bisogno di fare un File.Copy.

Diciamo che un client chiama il metodo remoto:

RemoteFile server.GetFile (percorso stringa);

come posso determinare se il client (il richiedente) si trova sulla stessa macchina?

È stato utile?

Soluzione

Se si conosce l'indirizzo IP per il server da cui si chiama il metodo remoto, è possibile utilizzare questo metodo per dire se si è o meno sullo stesso computer:

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 non conosci l'indirizzo IP per il tuo server remoto, puoi ottenerlo facilmente usando il nome host del server in questo modo:

Dns.GetHostAddresses("remote_host_address")

Questo restituisce un indirizzo IP [], che include tutto l'indirizzo risolto per quell'host.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top