Приведенный ниже код — это то, что я использую для проверки связи с 8.8.8.8, но иногда, когда я нажимаю «Пуск», это учитывает только потерю пакетов, что странно, потому что я уверен, что у меня не так много потерь пакетов, затем я ставлю его на паузу и начинаю снова, и он работает просто отлично, для меня это не имеет смысла, я в недоумении.
Я добавил Thread.Sleep(); потому что я догадался, что программа, вероятно, не загружается, когда я ее запускаю, но это тоже странно! это такая маленькая и простая программа, у нее не должно быть таких проблем
У меня также есть вопрос, какое время ожидания я должен установить для этого, прямо сейчас приложение отправляет пакет каждую секунду и отбрасывает его каждые 900 мс, должен ли я установить его выше 900 или это снизит производительность?
public partial class Form1 : Form
{
public int PingTime;
public int pingor = 0;
public int pingur = 0;
public int maxping;
public int minping;
public Int64 avgping;
public string avrage;
public int ping_no;
public string fail;
public string msg1 = " Packet Lost ";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (timer1.Enabled == true )
{
timer1.Enabled = false;
Thread.Sleep(1000);
}
else if (timer1.Enabled == false)
{
timer1.Enabled = true;
Thread.Sleep(1000);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
bool pingable = false;
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = "1";
byte[] buffer = Encoding.ASCII.GetBytes(data);
Ping pinger = new Ping();
try
{
//37.58.117.146
//8.8.8.8
PingReply reply = pinger.Send("8.8.8.8", 900, buffer, options);
pingable = reply.Status == IPStatus.Success;
string pingtime = reply.RoundtripTime.ToString();
int newpingtime = Convert.ToInt32(pingtime);
if (reply.Status == IPStatus.Success)
{
label1.Text = reply.RoundtripTime.ToString();
}
else
{
label1.Text = msg1;
}
//_________________________Max Ping
if (maxping == 0)
{
maxping = Convert.ToInt32(newpingtime);
}
else if (newpingtime >= Convert.ToInt32(maxping))
{
maxping = Convert.ToInt32(newpingtime);
}
lblmax.Text = maxping.ToString();
//_________________________Min Ping
if (reply.Status == IPStatus.Success && minping == 0 && newpingtime == 0)
{
lblmin.Text = minping.ToString();
}
else if (reply.Status == IPStatus.Success && lblmin.Text == " - - -" && newpingtime >= 0)
{
minping = newpingtime;
lblmin.Text = minping.ToString();
}
else if (reply.Status == IPStatus.Success && newpingtime < minping)
{
minping = newpingtime;
lblmin.Text = minping.ToString();
}
//_________________________Ping AVG
if (reply.Status == IPStatus.Success)
{
avgping = avgping + newpingtime;
ping_no = ping_no + 1;
lblavg.Text = Convert.ToString(avgping / ping_no);
}
}
catch (PingException error)
{
MessageBox.Show(error.Message);
}
if (pingable == true)
{
pingor++;
}
if (pingable == false)
{
pingur++;
}
lblrecived.Text = Convert.ToString(pingor);
lbllost.Text = Convert.ToString(pingur);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Thread.Sleep(900);
}
Заранее спасибо, просто сообщаю вам, что у меня не было потери пакетов более 2%, и это не должно показывать 40 потерянных пакетов и 0 полученных! также он работает просто отлично в 80% случаев!
Еще раз Это происходит, когда я делаю паузу и запускаю его снова быстро или несколько раз, когда я запускаю его в первый раз.
Debug.Writeline("Exception in Ping")
в ваш пустой блок catch, потому что в настоящее время вы понятия не имеете, когда возникает исключение, и это приведет к потере... - person Martin Verjans   schedule 10.02.2017