TCP服务器吞吐量减慢

时间:2014-03-13 20:27:32

标签: c# tcpclient tcplistener throughput

我正在尝试开发一些小应用来衡量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。我是网络编程的新手,所以有可能我做了一件非常愚蠢的事情。我可以要求一些建议吗?谢谢

1 个答案:

答案 0 :(得分:3)

您在开始时设置了开始,并且在应用程序的过程中不会更新它。第一次迭代是针对(现在 - 开始)进行测量的,这将是一个相对较快的时间。您的后续迭代将针对(现在 - 开始)进行测量,这比前一次调用的时间更长。为了准确测量吞吐量,我认为您需要将开始时间设置为循环内部,但在阅读之前。