Trova l'indirizzo IP di un oggetto remoto in remoto .net
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?
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.