İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Programlama
  4. Script Programlama (Python, Ruby, Perl, Bash/Shell
Script Programlama (Python, Ruby, Perl, Bash/Shell

C# Form App. Ping atma

AdmByPro17.02.20235 cevap1.821 görüntüleme
2021'den beri35 mesaj
#1
Merhaba arkadaşlar, C# Form Application ile Ping atma uygulaması yapmalıyım, baya uğraştım fakat bir türlü sonuca ulaşamadım, istenilen şey şu: Grafik arayüzlü basit bir Ping atma uygulaması, butona basınca "ağda ki tüm aktif IP adresleri" ve "Ip adreslerinin kullanıcı adları" listbox'a yazdırılacak, durdur butonu koymalıyım ekstradan, durdur butonuna basınca Ping işlemi duracak, bu tür bir yazılım için uğraşıyorum, Lütfen yardım edin, Teşekkür Ederim.
Cevaplar
2021'den beri2.233 mesaj
#2
using System.Net.NetworkInformation;
using System.Net.Sockets;

private void butonClick(object sender, EventArgs e)
{
    List<string> ipAddresses = new List<string>();
       
    Ping pingSender = new Ping();
    string localIpAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork).ToString();
    string subnet = localIpAddress.Substring(0, localIpAddress.LastIndexOf('.') + 1);
    for (int i = 1; i < 10; i++)
    {
        string ipAddress = subnet + i.ToString();
        PingReply reply = pingSender.Send(ipAddress);
        if (reply.Status == IPStatus.Success)
        {
            ipAddresses.Add(ipAddress);
        }
    }
   
    listBox1.Items.Clear();
    foreach (string ipAddress in ipAddresses)
    {
        listBox1.Items.Add(ipAddress);
    }
}

Ağdaki ip adreslerini bulmak için işe yarıyabilir. For döngüsündeki 10 değerini artırırsanız ağı tarama sayısı artar bu sebeple yavaş çalışabilir. Oraya 10 yazmam göstermek amaçlı.
Ayriytten bu işlemi backgroundWorker kullanarak farklı bir thread üzerinde yapmanız daha olumlu sonuçlar doğurur.
👍 2
AdmByPro Konuyu açan
2021'den beri35 mesaj
#3
using System.Net.NetworkInformation;
using System.Net.Sockets;

private void butonClick(object sender, EventArgs e)
{
    List<string> ipAddresses = new List<string>();
     
    Ping pingSender = new Ping();
    string localIpAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork).ToString();
    string subnet = localIpAddress.Substring(0, localIpAddress.LastIndexOf('.') + 1);
    for (int i = 1; i < 10; i++)
    {
        string ipAddress = subnet + i.ToString();
        PingReply reply = pingSender.Send(ipAddress);
        if (reply.Status == IPStatus.Success)
        {
            ipAddresses.Add(ipAddress);
        }
    }
 
    listBox1.Items.Clear();
    foreach (string ipAddress in ipAddresses)
    {
        listBox1.Items.Add(ipAddress);
    }
}

Ağdaki ip adreslerini bulmak için işe yarıyabilir. For döngüsündeki 10 değerini artırırsanız ağı tarama sayısı artar bu sebeple yavaş çalışabilir. Oraya 10 yazmam göstermek amaçlı.
Ayriytten bu işlemi backgroundWorker kullanarak farklı bir thread üzerinde yapmanız daha olumlu sonuçlar doğurur.
Hocam kod'u yerleştirdim, hata vermedi, çalıştırdım fakat sadece 192.168.0.1 IP adresini buldu, normal mi ?
2021'den beri2.233 mesaj
#4
O sırada internete kimler bağlı ise onları bulmuş olması lazım. Bunu denemek için telefonu ağa bağladıktan sonra bide bağlı olmadığı halde kodu çalıştırmak gerekir.
AdmByPro Konuyu açan
2021'den beri35 mesaj
#5
O sırada internete kimler bağlı ise onları bulmuş olması lazım. Bunu denemek için telefonu ağa bağladıktan sonra bide bağlı olmadığı halde kodu çalıştırmak gerekir.
Hocam 10'u 30 yaptım düzeldi çok teşekkür ederim, peki bunu sürekli hale çevirebilir miyim, ek durdur butonu ile işlemin durmasını sağlicam, bunu nasıl yapabilirim ?
2021'den beri2.233 mesaj
#6
Sürekli yapmanız tek thread de projeyi olumsuz etkiler. O yüzden bunu arka planda sürekli yapıcaksanız backgroundWorker kullanarak kullanılan thread sayısını artırmalısınız.

Kod:
 public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }
        private void button2_Click(object sender, EventArgs e)
        {           
            backgroundWorker1.WorkerSupportsCancellation = true;
            backgroundWorker1.CancelAsync();
        }

        private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            List<string> ipAddresses = new List<string>();

            Ping pingSender = new Ping();
            string localIpAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork).ToString();
            string subnet = localIpAddress.Substring(0, localIpAddress.LastIndexOf('.') + 1);
            for (int i = 1; i < 10; i++)
            {
                string ipAddress = subnet + i.ToString();
                PingReply reply = pingSender.Send(ipAddress);
                if (reply.Status == IPStatus.Success)
                {
                    ipAddresses.Add(ipAddress);
                }
            }

            listBox1.Items.Clear();
            foreach (string ipAddress in ipAddresses)
            {
                listBox1.Items.Add(ipAddress);
            }
        }

"Button1 click"deki olay farklı bir thread üzerinde ağ taramasını başlatır. Siz bunu "formun load" methodunda verirseniz program çalıştığı andan itibaren çalışmaya başlar.
"Button2 click" çalışan threadi durdurmaya yarar.

Try catch kullanarak olası hataların önüne geçebilirsiniz
👍 1düzenlendi

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.