2017-02-10 1 views
0

以下のコードは、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%を働いている!

もう一度、私が一時停止して、それを最初にやり直すときに、何度か何度もやり直します。

+0

Pingが世界に決定的な答えではありません - ピングはそうはい、pingは時にパケット損失を報告することができ、低ネットワークの優先度を持っていますしかし、それは他の問題を示唆しています。 – BugFinder

+0

しかし、CMD、PowershellとPingplotterを使用すると、私はそのような問題を抱えていません。私はそれを使用可能なアプリケーションにするために修正する必要があります。 –

+2

例外を受け取っていないことを確信していますか?あなたはそれを静かに抑制していますか? –

答えて

0

私はあなたのコードをテストし、同じ問題があります。その後、cmdからping 8.8.8.8 -t -w 900をテストしました。これは通常35ms(コードと同じです)を報告しますが、時々タイムアウトを表示することもあります。

タイムアウト値の設定は、リクエストがネットワーキングサービスに送信されてから応答が受信されるまでの時間と考えられます。サービスがビジー状態の場合、実際のpingが900ms以下で可能であっても、900msは十分ではない可能性があります。

(ない答えが、コメントのための長いへ)

enter image description here

+0

これに時間を置こうとしてくれてありがとう、私が言及しているかどうかわからないのは、1または2のパケットロスを得られないということです。同じ問題? @dognose –

+0

@ SinaM.Azad時々。ほとんどの時間は4-5の損失、4-5の良い、再び損失のようだった。 – dognose

関連する問題