Lorsque je cingle un système distant avec Windows, il dit qu'il n'y a pas de réponse, mais lorsque je cingle avec c #, il dit succès. Windows est correct, le périphérique n'est pas connecté. Pourquoi mon code est-il capable de faire un ping avec succès lorsque Windows ne l'est pas?
Voici mon code:
Ping p1 = new Ping();
PingReply PR = p1.Send("192.168.2.18");
// check when the ping is not success
while (!PR.Status.ToString().Equals("Success"))
{
Console.WriteLine(PR.Status.ToString());
PR = p1.Send("192.168.2.18");
}
// check after the ping is n success
while (PR.Status.ToString().Equals("Success"))
{
Console.WriteLine(PR.Status.ToString());
PR = p1.Send("192.168.2.18");
}
using System.Net.NetworkInformation;
public static bool PingHost(string nameOrAddress)
{
bool pingable = false;
Ping pinger = null;
try
{
pinger = new Ping();
PingReply reply = pinger.Send(nameOrAddress);
pingable = reply.Status == IPStatus.Success;
}
catch (PingException)
{
// Discard PingExceptions and return false;
}
finally
{
if (pinger != null)
{
pinger.Dispose();
}
}
return pingable;
}
L'utilisation de ping en C # s'effectue à l'aide de la méthode Ping.Send(System.Net.IPAddress)
, qui exécute une demande de ping vers l'adresse IP ou l'URL valide fournie et obtient une réponse en retour appelée ICMP). Paquet qui contient un en-tête de 20 octets contenant les données de réponse du serveur ayant reçu la demande de ping. Le framework .Net System.Net.NetworkInformation
nompace contient une classe appelée PingReply
classe dont les propriétés sont conçues traduire la réponse ICMP
et fournir des informations utiles sur la mise en réseau du serveur sur lequel un ping est envoyé, telles que:
Voici un exemple simple utilisant WinForms
pour montrer le fonctionnement de ping en c #, en fournissant une adresse IP valide dans textBox1
et en cliquant sur button1
, nous créons une instance du Ping class
, une variable locale de PingReply
, chaîne de la variable locale pour stocker l'adresse IP ou URL, puis nous affectons la variable locale PingReply
que nous avons créée à la méthode Send Send, puis nous vérifions si la demande a abouti. en comparant l'état de la réponse à la propriété IPAddress.Success
status, nous extrayons ensuite de PingReply
variable locale les informations que nous devons afficher pour l'utilisateur, décrites ci-dessus:
using System;
using System.Net.NetworkInformation;
using System.Windows.Forms;
namespace PingTest1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Ping p = new Ping();
PingReply r;
string s;
s = textBox1.Text;
r = p.Send(s);
if (r.Status == IPStatus.Success)
{
lblResult.Text = "Ping to " + s.ToString() + "[" + r.Address.ToString() + "]" + " Successful"
+ " Response delay = " + r.RoundtripTime.ToString() + " ms" + "\n";
}
}
private void textBox1_Validated(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(textBox1.Text) || textBox1.Text == "")
{
MessageBox.Show("Please use valid IP or web address!!");
}
}
}
}