测量tcp连接速度

测量tcp连接速度,c,sockets,unix,time,tcp,C,Sockets,Unix,Time,Tcp,我想编写一个简单的unix应用程序来测量tcp连接速度。 因此,我: 服务器侦听指定端口,接受连接并测量速度 客户端发送消息(连续) 我认为服务器上的度量是这样的: clock_gettime(CLOCK_REALTIME, &start); size = recv(csocket_fd, buf, BUFFER_SIZE, 0); clock_gettime(CLOCK_REALTIME, &end); 但这似乎是错误的方式 有什么建议吗?我在网络方面做了一些作业,我注意

我想编写一个简单的unix应用程序来测量tcp连接速度。 因此,我:

  • 服务器侦听指定端口,接受连接并测量速度
  • 客户端发送消息(连续)
我认为服务器上的度量是这样的:

clock_gettime(CLOCK_REALTIME, &start);
size = recv(csocket_fd, buf, BUFFER_SIZE, 0);
clock_gettime(CLOCK_REALTIME, &end);
但这似乎是错误的方式


有什么建议吗?

我在网络方面做了一些作业,我注意到一件事,那就是它不会像你尝试的那样工作。我们必须完成发送-接收,服务器才能再次接收,还有其他因素阻止我们这样做。。。从MTU到缓冲区大小等,我使用的是在[这就是你所说的速度吗?]之前对带宽进行基准测试。代码是开源的。

在服务器上,当您从客户端接收到第一个数据时,将当前时间记录到一个变量中

同样在服务器上,无论何时从客户端接收数据,都将接收的字节数添加到计数器变量中

然后,在任何需要的时候,您都可以通过计算(接收的总字节数)/(当前时间-接收的第一个数据时间)来计算连接的累积平均每秒字节数;(如果当前\u时间和接收到的第一个\u数据\u时间相等,请注意电位除以零!)


如果你想做一些更详细的事情,比如最近10秒的运行平均值,这会稍微复杂一点,但计算累积平均值相当容易。

这似乎不一致,因为如果数据已经被接收并保存在缓冲区中等待发送给你,它可能会很快返回,或者,如果您必须等待在远程系统选择的时间发送数据,则速度非常慢。要首先解决问题,你必须决定“速度”是什么意思。例如,可以对传输大文件的整个过程计时。但是要意识到TCP是为可靠性而设计的,不是为了速度,特别是在低延迟的意义上不是为了速度。我真的很抱歉。。。我似乎不能对这个问题发表评论。。必须把它作为一个答案