Quand je cingle un système distant avec Windows, il dit qu'il n'y a pas de réponse, mais quand je cingne avec c #, cela indique le succès. Windows est correct, l'appareil n'est pas connecté. Pourquoi mon code est-il capable d'envoyer un ping avec succès alors que 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");
}
PR.Address
,PR.RoundtripTime
,PR.reply.Buffer.Length
etPR.Options.Ttl
)? Êtes-vous également sûr d'avoir la bonne adresse IP dans votre code, et non une adresse IP de test?Réponses:
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; }
la source
using (var pinger = new Ping()) { .. }
et les premiers retours sont-ils si mauvais?using
place, et il est préférable dans ce cas.L'utilisation de ping en C # est obtenue à l'aide de la méthode
Ping.Send(System.Net.IPAddress)
, qui exécute une requête ping à l'adresse IP ou à l'URL fournie (valide) et obtient une réponse appelée paquet ICMP (Internet Control Message Protocol) . Le paquet contient un en-tête de 20 octets qui contient les données de réponse du serveur qui a reçu la requête ping. L'System.Net.NetworkInformation
espace de noms .Net Framework contient une classe appeléePingReply
qui a des propriétés conçues pour traduire laICMP
réponse et fournir des informations utiles sur le serveur ping, telles que:Voici un exemple simple d'utilisation
WinForms
pour illustrer le fonctionnement de ping dans c #. En fournissant une adresse IP validetextBox1
et en cliquantbutton1
, nous créons une instance de laPing
classe, une variable localePingReply
et une chaîne pour stocker l'adresse IP ou URL. Nous attribuonsPingReply
à laSend
méthode ping , puis nous inspectons si la requête a abouti en comparant l'état de la réponse à l'IPAddress.Success
état de la propriété . Enfin, nous extrayonsPingReply
les informations que nous devons afficher pour l'utilisateur, qui sont 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!!"); } } } }
la source
Importe System.Net.NetworkInformation
Fonction publique PingHost (ByVal nameOrAddress As String) As Boolean Dim pingable As Boolean = False Dim pinger As Ping Dim lPingReply As PingReply
Try pinger = New Ping() lPingReply = pinger.Send(nameOrAddress) MessageBox.Show(lPingReply.Status) If lPingReply.Status = IPStatus.Success Then pingable = True Else pingable = False End If Catch PingException As Exception pingable = False End Try Return pingable End Function
la source
private void button26_Click(object sender, EventArgs e) { System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo(); proc.FileName = @"C:\windows\system32\cmd.exe"; proc.Arguments = "/c ping -t " + tx1.Text + " "; System.Diagnostics.Process.Start(proc); tx1.Focus(); } private void button27_Click(object sender, EventArgs e) { System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo(); proc.FileName = @"C:\windows\system32\cmd.exe"; proc.Arguments = "/c ping " + tx2.Text + " "; System.Diagnostics.Process.Start(proc); tx2.Focus(); }
la source