如何验证远程计算机是否可用?

时间:2016-06-15 13:26:05

标签: c#

我正在编写一个程序的一部分,该程序将一批文件从当前计算机复制到已定义的计算机列表中。 如果这些计算机不可用,代码将在尝试访问它们时长时间挂起。在C#中是否有任何功能可以检查机器是否可用,如果不可用则跳过?

MFWs = File.ReadAllLines(GuiManager.MyConfigManagerConfig.MachinesList);
        foreach (string MFW in MFWs)
        {
          if (MFW != System.Environment.MachineName)
          {
            String target = @"\\" + MFW + @"\D\IbSi\config\" + Path.GetFileName(ConfigFile);
            String backup = @"\\" + MFW + @"\D\IbSi\userdata\" + Path.GetFileName(ConfigFile);
            try
            {
              File.Copy(source, target, true);
              File.Copy(source, backup, true);
            }
            catch (Exception ex)
            {
              Manager.SendMessage("Failed to copy " + Path.GetFileName(ConfigFile) + " to " + MFW + "\n" + ex.Message);
            }
          }
        }

1 个答案:

答案 0 :(得分:1)

您可以在开始复制之前ping计算机(取自this answer):

using System.Net.NetworkInformation;

public static bool IsHostAvailable(string nameOrAddress)
{
    bool pingable = false;
    Ping pinger = new Ping();
    try
    {
        PingReply reply = pinger.Send(nameOrAddress);
        pingable = reply.Status == IPStatus.Success;
    }
    catch (PingException)
    {
        // Discard PingExceptions and return false;
    }
    return pingable;
}

如评论中所述,您需要确保服务器上的防火墙对ping(ICMP回应请求)是开放的