1

.net リモート処理を使用するクライアント サーバー アプリケーションがあります。クライアントは LAN 内にあり、事前にその場所がわかりません。

ファイル転送を行う場合があり、最適化として、クライアントが実際にサーバーと同じマシン上にあるかどうかを判断したいと考えています (可能性は十分にあります)。この場合、File.Copy を実行するだけで済みます。

クライアントがリモート メソッドを呼び出すとします。

RemoteFile server.GetFile(文字列パス);

クライアント (リクエスタ) が同じマシン上にあるかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

2

リモート メソッドを呼び出しているサーバーの 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")

これは、そのホストのすべての解決済みアドレスを含む IPAddress[] を返します。

于 2008-10-30T18:25:22.447 に答える