Почему разный результат проверки списка C#?
прошу помочь сообщество с программой Эта программа предназначена для массовой проверки доступности IP адресов. Загрузка адресов происходит в ListBox "Загруженные IP" из txt файла, после нажатия кнопки "Ping" IP должны пропинговаться и доступные адреса добавиться в другой ListBox "Доступные IP", а недоступные записаться в Log (пока не реализовано), однако, несмотря на частичную работу программы -- результат непредсказуемый. В ListBox "Доступные IP" либо не попадают адреса совсем (все адреса в списке 100% доступны), либо после многократного нажатия на "Ping" попадают в разном количестве.
namespace AOConfig
{
public partial class MassScript : Form
{
public MassScript()
{
InitializeComponent();
}
private void OpenFileBtn_Click(object sender, EventArgs e)
{
SourceList.Items.Clear();
using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text Documents(*.txt)|*.txt", ValidateNames = true, Multiselect = false })
{
if (ofd.ShowDialog() == DialogResult.OK)
{
string[] switchList = System.IO.File.ReadAllLines(ofd.FileName,Encoding.UTF8);
SourceList.Items.AddRange(switchList);
TotalCount_label.Text = SourceList.Items.Count.ToString();
}
}
}
private void StartPingBtn_Click(object sender, EventArgs e)
{
Ping switchPing = new Ping();
PingReply pingReply = null;
PingOptions options = new PingOptions();
options.DontFragment = true;
// options.Ttl = 64;
int timeout = 100;
foreach (var Item in SourceList.Items)
{
string Host = SourceList.GetItemText(Item);
byte[] buffer = Encoding.ASCII.GetBytes(Host);
pingReply = switchPing.Send(Host, timeout, buffer, options);
if (pingReply.Status == IPStatus.Success)
{
LiveList.Items.Add(Host);
LiveCount_label.Text = LiveList.Items.Count.ToString();
}
else
{
break;
}
}
}
}
}
Ответы (1 шт):
Для работы в публичных сетях, необходимо поставить int timeout побольше, цикл не обрывать. Рабочий код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Net.NetworkInformation;
namespace AOConfig
{
public partial class MassScript : Form
{
public MassScript()
{
InitializeComponent();
}
private void OpenFileBtn_Click(object sender, EventArgs e)
{
SourceList.Items.Clear();
using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Text Documents(*.txt)|*.txt", ValidateNames = true, Multiselect = false })
{
if (ofd.ShowDialog() == DialogResult.OK)
{
string[] switchList = System.IO.File.ReadAllLines(ofd.FileName,Encoding.UTF8);
SourceList.Items.AddRange(switchList);
TotalCount_label.Text = SourceList.Items.Count.ToString();
}
}
}
private void StartPingBtn_Click(object sender, EventArgs e)
{
Ping switchPing = new Ping();
PingReply pingReply = null;
PingOptions options = new PingOptions();
options.DontFragment = true;
// options.Ttl = 64;
int timeout = 1000; // время ожидания ответа 1 сек
foreach (var Item in SourceList.Items)
{
string Host = SourceList.GetItemText(Item);
byte[] buffer = Encoding.ASCII.GetBytes(Host);
pingReply = switchPing.Send(Host, timeout, buffer, options);
if (pingReply.Status == IPStatus.Success)
{
LiveList.Items.Add(Host);
LiveCount_label.Text = LiveList.Items.Count.ToString();
}
else
{
continue; // не прерываем цикл
}
}
}
}
}
