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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top