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.
C# Form App. Ping atma
Cevaplar
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
Hocam kod'u yerleştirdim, hata vermedi, çalıştırdım fakat sadece 192.168.0.1 IP adresini buldu, normal mi ?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.
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 ?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.
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:
"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
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