以下のコードは、8.8.8.8をpingするために使用しているものですが、開始ボタンを押したときにパケットロスが発生することがあります。これは奇妙です。そのパケット損失の多くを持っている、私はそれを一時停止し、再び開始し、それはうまく動作し、それは私には意味をなさない、私は失っている。ランダムランダムパケットロスを取得する
Thread.Sleep()を追加しました。私はそれを開始するときにプログラムがおそらくロードされていないと推測したので、それはあまりにも奇妙です!それがこのような問題
私も、今のアプリは、パケット毎秒を送信するものタイムアウト、私はこのために置く必要があり、時間が質問を持っているを持つべきではありません、このような小型でシンプルなプログラムであり、すべての900ms、それをドロップし、私はそれを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%を働いている!
もう一度、私が一時停止して、それを最初にやり直すときに、何度か何度もやり直します。
Pingが世界に決定的な答えではありません - ピングはそうはい、pingは時にパケット損失を報告することができ、低ネットワークの優先度を持っていますしかし、それは他の問題を示唆しています。 – BugFinder
しかし、CMD、PowershellとPingplotterを使用すると、私はそのような問題を抱えていません。私はそれを使用可能なアプリケーションにするために修正する必要があります。 –
例外を受け取っていないことを確信していますか?あなたはそれを静かに抑制していますか? –