Ping:远程设备无法ping但已连接

时间:2018-01-02 16:28:37

标签: c# .net asp.net-mvc ping biometrics

我有一个远程设备(在我的情况下是生物识别)放置在位置X.当处于位置Y时,我能够连接到该设备。但是,每次连接失败或无法在白天连接时,我都需要知道原因。为此,我试图在每次连接或未建立连接时ping设备,因此我知道断开的原因。下面的代码段返回false,即使设备能够成功连接也无法ping通。我试图增加timeout,但它仍然显示超时并最终无法ping。

控制器:

bool isPinged = false;
   isConnected = objZkeeper2.Connect_Net(IpAddr, Port);

            if (isConnected)
            {
//considering the connection is established, I am sending a ping req

 isPinged = PingTheDevice(IpAddr);

然后:

public static bool PingTheDevice(string ipAdd)
        {
            try
            {
                IPAddress ipAddress = IPAddress.Parse(ipAdd);

                Ping pingSender = new Ping();
                PingOptions options = new PingOptions();
                options.DontFragment = true;
                byte[] buffer = new byte[32];

                int timeout = 5000;
                PingReply reply = pingSender.Send(ipAddress, timeout, buffer, options);

                if (reply.Status == IPStatus.Success)
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
        }

3 个答案:

答案 0 :(得分:1)

添加到ADyson的评论:是的,可能有设备不响应​​ping。但是我觉得你已经用ping.exe测试了这个,不是吗?

您的ping代码本身有效(仅测试它)。但是:你确定ipAdd总是包含有效的IP地址而不是主机名吗?在后一种情况下,Parse方法抛出异常。

我查看了一些代码,这部分来自一个在生产中运行多年的诊断工具。

代码是:

public static bool Ping(string host)
{
    for (int pass = 0; pass < 3; ++pass)
    {
        try
        {
            Ping pingSender = new Ping();
            PingReply reply = pingSender.Send(host);
            if (reply.Status == IPStatus.Success)
                return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

    return false;
}

我没有增加超时,而是使用重试循环。我的经验是第一次ping可能会失败。如果增加超时并不重要。所以我使用自己的重试机制获得了更好的可靠性。

此外,您可以将其与主机名或IP地址一起使用。

答案 1 :(得分:1)

请尝试使用此示例代码在我的情况下它正在这里工作我在你的情况下传递一些随机字符串,有可能它需要一些垃圾值,所以它无法ping设备。

 public static bool PingTheDevice(string ipAdd)
    {
  try
        {
            IPAddress ipAddress = IPAddress.Parse(ipAdd);

            Ping pingSender = new Ping();
            PingOptions options = new PingOptions();
            options.DontFragment = true;

            // Create a buffer of 32 bytes of data to be transmitted. 
            string data = "abcdefghijklmnopqrstuvwxyz";
            byte[] buffer = Encoding.ASCII.GetBytes(data);
            int timeout = 120;
            PingReply reply = pingSender.Send(ipAddress, timeout, buffer, options);

            if (reply.Status == IPStatus.Success)
                return true;
            else
            {
                return false;
            }
        }
        catch (Exception)
        {
            return false;
        }
    }

答案 2 :(得分:1)

所有连接到网络的生物识别机都是可ping的。在尝试完成程序之前,请检查您是否能够通过标准ping命令ping机器。

通常,要将生物识别设备与计算机成功连接,请尝试以下几个步骤。

  • 检查您的机器是否支持DHCP。如果支持,请启用它并重新启动计算机。检查你是否可以ping。
  • 如果上述步骤不起作用,请在计算机和本机中禁用DHCP。在计算机和考勤机中手动设置IP,子网掩码和默认网关。确保两者中的子网掩码和默认网关相同,并且IP4的前3个部分在两者中都相同。如果您遇到问题,请确保计算机和计算机的LAN线路来自同一个交换机/集线器。

以上步骤将帮助您将生物识别计算机与计算机连接起来。成功验证ping后,您可以立即调用objZkeeper2.Connect_Net从程序中连接机器。