C# Ping:远程设备无法Ping,但已连接

C# Ping:远程设备无法Ping,但已连接,c#,.net,asp.net-mvc,ping,biometrics,C#,.net,Asp.net Mvc,Ping,Biometrics,我在X位置放置了一个远程设备(在我的情况下是生物识别设备)。在Y位置时,我能够连接到该设备。但是,每次连接失败或白天无法连接时,我都需要知道原因。为此,每次连接设备或未建立连接时,我都会尝试ping设备,以便知道断开连接的原因。下面的代码段返回false,即即使设备能够成功连接,也无法ping。我试图增加超时,但它仍然显示超时,最终未能ping 控制器: bool isPinged = false; isConnected = objZkeeper2.Connect_Net(IpAddr,

我在X位置放置了一个远程设备(在我的情况下是生物识别设备)。在Y位置时,我能够连接到该设备。但是,每次连接失败或白天无法连接时,我都需要知道原因。为此,每次连接设备或未建立连接时,我都会尝试ping设备,以便知道断开连接的原因。下面的代码段返回false,即即使设备能够成功连接,也无法ping。我试图增加
超时
,但它仍然显示超时,最终未能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);
然后:


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;
}
公共静态bool Ping(字符串主机)
{
对于(int pass=0;pass<3;++pass)
{
尝试
{
Ping pingSender=新Ping();
PingReply reply=pingSender.Send(主机);
if(reply.Status==IPStatus.Success)
返回true;
}
捕获(例外)
{
返回false;
}
}
返回false;
}
我使用重试循环,而不是增加超时。我的经验是,第一次ping可能会失败。如果您增加超时时间,这并不重要。因此,我使用自己的重试机制具有更好的可靠性


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

添加到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;
}
公共静态bool Ping(字符串主机)
{
对于(int pass=0;pass<3;++pass)
{
尝试
{
Ping pingSender=新Ping();
PingReply reply=pingSender.Send(主机);
if(reply.Status==IPStatus.Success)
返回true;
}
捕获(例外)
{
返回false;
}
}
返回false;
}
我使用重试循环,而不是增加超时。我的经验是,第一次ping可能会失败。如果您增加超时时间,这并不重要。因此,我使用自己的重试机制具有更好的可靠性


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

请尝试使用此示例代码在我的示例中它正在工作。我在您的示例中传递了一些随机字符串,它可能需要一些垃圾值,因此无法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;
        }
    }

请在我的例子中尝试这个示例代码,它在这里工作,我在你的例子中传递一些随机字符串,有可能它需要一些垃圾值,因此无法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;
        }
    }

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

通常,要成功地将生物识别机器与计算机连接,请尝试以下两个步骤

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

以上步骤将帮助您将生物识别机器与计算机连接。成功验证ping后,您可以直接调用objZkeeper2.Connect\u Net从程序连接机器。

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

通常,要成功地将生物识别机器与计算机连接,请尝试以下两个步骤

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

以上步骤将帮助您将生物识别机器与计算机连接。成功验证ping后,您可以直接调用objZkeeper2.Connect\u Net从程序连接机器。

您确定设备已配置为响应ping吗?虽然理论上IP网络上的所有设备都应该响应,但有时它们不会响应,或者功能可能会被禁用。不管怎样,ping报告将如何帮助您准确地确定断开连接的原因?@ADyson让我们说,由于某种原因,设备无法远程连接,我需要检查它是否正在ping。如果正在ping但未连接到