我正在编写一个程序的一部分,该程序将一批文件从当前计算机复制到已定义的计算机列表中。 如果这些计算机不可用,代码将在尝试访问它们时长时间挂起。在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);
}
}
}
答案 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回应请求)是开放的