【问题标题】:c# ping between two ip addressesc# 在两个ip地址之间ping
【发布时间】:2015-10-01 19:13:18
【问题描述】:

如何在 c# 中检查两台服务器是否从第三台服务器连接? 我在服务器 A 中,我想知道服务器 B 和服务器 C 是否已连接。 我只有代码来检查我是否连接到服务器 B 或 C。 我有什么:

public bool AreConnected(string ip)
{
    bool connected= false;
    Ping p = new Ping();
    try
    {                
        PingReply reply = p.Send(ip);
        connected = reply.Status == IPStatus.Success;
    }
    catch (PingException)
    {
        // Discard PingExceptions and return false;
    }
    return connected;
}

【问题讨论】:

  • 当然,如果您可以同时连接两者,那么它们可以相互连接
  • @Cjen1,没必要。可能有防火墙规则阻止它们相互连接。
  • 我已经知道我已经连接到 B 和 C,但是我如何确定 B 和 C 也连接了?

标签: c# server ping


【解决方案1】:

这可能不是最好的方法,它需要机器 B 的管理员权限,但它可以工作。

使用PsExec。该工具允许您在远程机器上运行命令。

创建一个命令行程序,将ip地址作为命令行参数,ping ip地址并输出结果。

然后运行 ​​PsExec(来自 C# 代码)在机器 B 上执行此类程序并收集结果(也来自代码)。

您需要使用 Process.Start 才能从 C# 代码执行 PsExec 命令。

【讨论】:

  • 谢谢,但我试图用完整的 c# 代码来获取它,而无需安装或下载其他任何东西
【解决方案2】:

我使用 PsExec 并且工作正常,下面我的代码也许可以帮助其他人,

public bool IsPingable(string servA, string servB)
    {
        string path = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory())) + "\\Resources\\PsExec.exe";
        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.FileName = path;
        p.StartInfo.Arguments = @"\\" + servA + " ping " + servB + " -n 1";
        p.StartInfo.RedirectStandardOutput = true;
        p.Start();
        string output = p.StandardOutput.ReadToEnd();
        if (!output.Contains("100% loss"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

【讨论】:

  • 通常情况下,当其他人提供解决您问题的答案时,您会接受他们的答案。如果您认为您的代码有帮助,可以将其添加到您的问题中。
猜你喜欢
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 2013-09-08
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多