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