Trouver l'adresse IP d'un objet distant dans .net remoting
Question
J'ai une application client-serveur qui utilise .net remoting. Les clients sont sur un réseau local et je ne connais pas leur emplacement à l’avance.
Parfois, nous effectuons des transferts de fichiers et, à titre d'optimisation, je veux déterminer si un client est en fait sur le même ordinateur que le serveur (c'est tout à fait possible). Dans ce cas, je n'ai besoin que de faire une File.Copy.
Supposons qu'un client appelle la méthode distante:
Serveur de fichiers distants.GetFile (chemin de la chaîne);
comment puis-je déterminer si le client (le demandeur) se trouve sur le même ordinateur?
La solution
Si vous connaissez l'adresse IP du serveur à partir duquel vous appelez la méthode distante, vous pouvez utiliser cette méthode pour savoir si vous êtes ou non sur le même ordinateur:
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 vous ne connaissez pas l'adresse IP de votre serveur distant, vous pouvez facilement l'obtenir à l'aide du nom d'hôte du serveur, comme suit:
Dns.GetHostAddresses("remote_host_address")
Ceci retourne une adresse IP [] contenant toutes les adresses résolues pour cet hôte.