Найдите IP-адрес удаленного объекта в .net remoting - PullRequest
1 голос
/ 30 октября 2008

У меня есть клиент-серверное приложение, которое использует .net remoting. Клиенты находятся в локальной сети, и я заранее не знаю, где они находятся.

Иногда мы выполняем передачу файлов, и в качестве оптимизации я хочу определить, действительно ли клиент находится на той же машине, что и сервер (это вполне возможно). В этом случае мне нужно только сделать File.Copy.

Допустим, клиент вызывает удаленный метод:

RemoteFile server.GetFile (путь строки);

как я могу определить, находится ли клиент (запрашивающая сторона) на той же машине?

1 Ответ

2 голосов
/ 30 октября 2008

Если вам известен IP-адрес сервера, с которого вы вызываете удаленный метод, вы можете использовать этот метод, чтобы узнать, находитесь ли вы на одном компьютере:

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());
}

Если вы не знаете IP-адрес вашего удаленного сервера, вы можете легко получить его, используя имя хоста сервера, например:

Dns.GetHostAddresses("remote_host_address")

Возвращает IP-адрес [], который включает все разрешенные адреса для этого хоста.

...