我正在尝试开发一些小应用来衡量Wi-Fi吞吐量。到目前为止我有这个代码:
private void handle_connection(IAsyncResult result)
{
accept_connection();
client = listener.EndAcceptTcpClient(result);
long total = 0;
double start = DateTime.Now.TimeOfDay.TotalMilliseconds;
while ((flag))
{
try
{
NetworkStream ns = client.GetStream();
byte[] bytesFrom = new byte[1024 * 100];
ns.Read(bytesFrom, 0, (int)client.ReceiveBufferSize);
total += bytesFrom.Length;
double cost = DateTime.Now.TimeOfDay.TotalMilliseconds - start;
double megaBytes = (total / (1024.0 * 1024));
double seconds = Convert.ToDouble((cost / 1000.0).ToString("0.00"));
float MB_Result = Convert.ToSingle((megaBytes / seconds).ToString("0.00"));
float Mbit_Result = MB_Result * 8;
Invoke(new System.Action(() => chart.Series["Mbps"].Points.AddXY(seconds, Mbit_Result)));
Invoke(new System.Action(() => currSpeedLbl.Text = Mbit_Result + " Mbit/s (" + MB_Result + "MB/s)"));
}
catch(Exception)
{
}
}
}
我尝试在图表上显示结果。在传输的乞讨时,我有大约60Mbit / s的速度,但过了一段时间它下降到1Mbit。我是网络编程的新手,所以有可能我做了一件非常愚蠢的事情。我可以要求一些建议吗?谢谢
答案 0 :(得分:3)
您在开始时设置了开始,并且在应用程序的过程中不会更新它。第一次迭代是针对(现在 - 开始)进行测量的,这将是一个相对较快的时间。您的后续迭代将针对(现在 - 开始)进行测量,这比前一次调用的时间更长。为了准确测量吞吐量,我认为您需要将开始时间设置为循环内部,但在阅读之前。