Подтвердить что ты не робот

Использование ping в С#

Когда я пингую удаленную систему с окнами, она говорит, что ответа нет, но когда я пингу с С#, он говорит об успехе. Windows правильная, устройство не подключено. Почему мой код может успешно выполнить ping, когда Windows не работает?

Вот мой код:

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");
}
4b9b3361

Ответ 1

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;
}

Ответ 2

Использование ping в С# достигается с помощью метода Ping.Send(System.Net.IPAddress), который выполняет запрос ping на предоставленный действительный IP-адрес или URL-адрес и получает ответный ответ, который называется Пакет протокола управления сообщениями Интернета (ICMP) который содержит заголовок из 20 байтов, который содержит данные ответа от проверенного сервера, который получил запрос проверки связи, пространство имен .Net framework System.Net.NetworkInformation содержит класс с именем PingReply Class, который имеет свойства, предназначенные для преобразования ответа ICMP и доставить полезную информацию о сети pinged-сервера, такую как:

  • IPStatus: получает адрес хоста, который отправляет интернет Эхо-ответ по протоколу управляющих сообщений (ICMP).
  • IP-адрес: получает количество миллисекунд, потраченных на отправку Интернета. Эхо-запрос протокола управляющих сообщений (ICMP) и получение соответствующее ответное эхо-сообщение ICMP.
  • RoundtripTime (System.Int64): получает параметры, используемые для передачи ответа на эхо-протокол ICMP. запрос.
  • PingOptions (System.Byte []): получает буфер данных, полученных в ответном эхо-сообщении по протоколу управляющих сообщений Интернета (ICMP).

Ниже приведен простой пример использования WinForms для демонстрации работы ping в c #. Предоставляя действительный IP-адрес в textBox1 и нажимая button1, мы создаем экземпляр Ping class, локальной переменной PingReply. ], строка локальной переменной для хранения IP или URL-адреса, затем мы назначаем созданную нами локальную переменную PingReply для метода ping Send, а затем проверяем, был ли запрос успешным, сравнивая состояние ответа со свойством IPAddress.Success статус, затем мы извлекаем из локальной переменной PingReply информацию, которая должна отображаться для пользователя, как описано выше:

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!!");
            }
        }
    }
}

Ответ 3

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();
}