title: calculate sending file speed/sec by taking the average of 5 times of sent bytes
body: <p>im trying to calculate the transfer file speed per second using the average<br>
  i took the different between the sent bytes <b>sum</b> and the <b>prevSum</b> 5 times per second<br>
  <li>does the code below give me the correct speed?
  <li>should i change the rate array size ?
  <li>or should i change Thread.Sleep(value) ?<br>
  im so confused because each time a change a little thing the speed value changes.. what's the correct solution for that ??</p>
  
  <pre><code>    static long prevSum = 0;
      static long[] rate = new long[5];
      private static void SpeedPerSec(object o)
      {
          fileProgress fP = (fileProgress)o; //get the form conrtols
          while (busy)    // while sending file is active
          {
              for (int i = 0; i &lt; rate.Length; i++)
              {
                  //diff between the sent bytes and prev sent bytes
                  rate[i] = (sum - prevSum);
                  Thread.Sleep(1000/rate.Length);
              }
              prevSum = sum;
              fP.RateLabel(Convert.ToInt64(rate.Average()));   
              //print the trasnfer rate which take a long value .. it just print the value in MB or KB string
          }
      }
  </code></pre>
  
  <p>here is the sendFile Code :</p>
  
  <pre><code>    public static bool busy = false;
      public static Socket client;
      public static int packetSize = 1024*8;
      public static int count = 0;
      public static long fileSize;
      public static long sum = 0;
  public static void sendFile(string filePath)
      {
          // run the progres Form
          Thread thFP = new Thread(fpRUN);
          fileProgress fP = new fileProgress("Sending...");
          thFP.Start(fP);
  
          FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
          string fileName = Path.GetFileName(filePath);
          byte[] fileData;
          try
          {
              //sending file name and file size to the server
              busy = true;
              fileSize = fs.Length;
              byte[] fileDetial = null;
              string detail =  fileName + "," + fileSize.ToString();
              fileDetial = Encoding.ASCII.GetBytes(detail);
              client.Send(fileDetial);
  
              //sending file data to the server
  
              fileData = new byte[packetSize];
              count = 0;
              sum = 0;
  
              Thread thSpeed = new Thread(SpeedAndTimeLeft); //*here the thread of SPEED per second method
              thSpeed.Start(fP);
              fP.SizeLabel(fileSize);                     // tell the form the file size
              Thread thClock = new Thread(fP.clock);
              thClock.Start();
              while (sum &lt; fileSize)
              {
                  fs.Seek(sum, SeekOrigin.Begin);
                  fs.Read(fileData, 0, fileData.Length);
                  count = client.Send(fileData, 0, fileData.Length, SocketFlags.None);
                  sum += count;
                  fP.ProgressBarFileHandler(sum,fileSize);        //progressbar value
                  fP.SentLabel(sum, fileSize);                    //tell the form how much sent                }
          }
          finally
          {
              busy = false;
              fs.Close();
              fileData = null;
              MessageBox.Show(string.Format("{0} sent successfully", fileName));
          }
      }
  </code></pre>