Soru C# Form App. Ping atma

Bu konuyu okuyanlar

AdmByPro

Öğrenci
Katılım
2 Kasım 2021
Mesajlar
35
Reaksiyon puanı
5
Puanları
8
Yaş
24
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.
 

Ekli dosyalar

  • resim_2023-02-17_220946740.png
    resim_2023-02-17_220946740.png
    6.8 KB · Görüntüleme: 54

Eminkrkt

Jet Sesi, Özgürlüğün Sesidir!
Moderatör
Katılım
3 Mayıs 2021
Mesajlar
2,179
Çözümler
8
Reaksiyon puanı
1,778
Puanları
113
C#:
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);
    }
}
Mesaj otomatik birleştirildi:

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.
 

AdmByPro

Öğrenci
Katılım
2 Kasım 2021
Mesajlar
35
Reaksiyon puanı
5
Puanları
8
Yaş
24
C#:
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);
    }
}
Mesaj otomatik birleştirildi:

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 ?
 

Eminkrkt

Jet Sesi, Özgürlüğün Sesidir!
Moderatör
Katılım
3 Mayıs 2021
Mesajlar
2,179
Çözümler
8
Reaksiyon puanı
1,778
Puanları
113
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

Öğrenci
Katılım
2 Kasım 2021
Mesajlar
35
Reaksiyon puanı
5
Puanları
8
Yaş
24
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 ?
 

Eminkrkt

Jet Sesi, Özgürlüğün Sesidir!
Moderatör
Katılım
3 Mayıs 2021
Mesajlar
2,179
Çözümler
8
Reaksiyon puanı
1,778
Puanları
113
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:
C#:
 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);
            }
        }
Mesaj otomatik birleştirildi:

"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
 
Son düzenleme:
  • Beğen
Reactions: bud
Üst