C# 计算连接速率(毫秒)(延迟)

C# 计算连接速率(毫秒)(延迟),c#,tcp,C#,Tcp,我试图计算连接的客户机(服务器->客户机)的延迟。我想在ping循环(测试客户机是否仍然连接)期间执行此操作。下面是我ping它的方式(尝试发送数据,如果失败,客户机已断开连接) 我假设我需要计算发送数据包所需的时间。但我不知道该怎么做。任何帮助都会被请求。很难获得单向延迟(服务器延迟)→客户端)的连接。如果您知道在连接的每一端都有非常准确的时间(例如,GPS或原子钟或非常接近的高质量NTP同步时钟),并且在每一端都有专用于任务的软件运行,则可以执行此操作 否则,最好计算两个方向的延迟(RTT,

我试图计算连接的客户机(服务器->客户机)的延迟。我想在ping循环(测试客户机是否仍然连接)期间执行此操作。下面是我ping它的方式(尝试发送数据,如果失败,客户机已断开连接)


我假设我需要计算发送数据包所需的时间。但我不知道该怎么做。任何帮助都会被请求。

很难获得单向延迟(服务器延迟)→客户端)的连接。如果您知道在连接的每一端都有非常准确的时间(例如,GPS或原子钟或非常接近的高质量NTP同步时钟),并且在每一端都有专用于任务的软件运行,则可以执行此操作

否则,最好计算两个方向的延迟(RTT,往返时间),除以2,希望连接是对称的,数据包的路径是对称的。如果数据包的路径不是对称的,那么数据包在一个方向上比在另一个方向上花费更长的时间,并且您无法先验地知道需要多长时间


计算RTT很简单:让第一方发送一条短消息,让另一端立即返回另一条。第一方从发送请求消息以获取RTT的时间中减去收到响应消息的时间。

一个简单的解决方案(假设您同时实现了客户端和服务器),就是让服务器将当前时间发送给客户端,然后让客户端将其发送回,然后找到差异并除以2(假设对称连接)。这只适用于本地主机,或者同一时区,不是吗?这将有多个连接,希望来自不同的国家/地区。客户端的时间不在其中。假设服务器上的时间是9:30:00,客户端上的时间是5:30。服务器向客户端发送一个带有“9:30:00”的数据包在这种情况下,客户端发回数据包,服务器接收数据包。现在服务器上的时间是9:30:01,因此服务器可以推断往返时间为1秒,或每种方式0.5秒……您可以通过将发送的每个数据包的时间存储在服务器状态来实现这一点,但这种方式更简单(也更脏)。
        while (information.connectionEst)
        {
            try
            {


                byte[] data = Encoding.ASCII.GetBytes("");

                stream.Write(data, 0, data.Length);


            }
            catch (Exception e)
            {

                killConnection();
                thread.Abort();
            }

        }