我想编写一个简单的unix-application来测量tcp-connection速度。 所以我有:
我认为服务器上的测量结果是这样的:
clock_gettime(CLOCK_REALTIME, &start);
size = recv(csocket_fd, buf, BUFFER_SIZE, 0);
clock_gettime(CLOCK_REALTIME, &end);
但似乎这是错误的方式。
有什么建议吗?
答案 0 :(得分:1)
在服务器上,当您从客户端收到第一个数据时,将当前时间记录到变量中。
同样在服务器上,无论何时从客户端接收数据,都要将收到的字节数添加到计数器变量中。
然后,在任何时候,您可以通过计算(total_bytes_received)/(current_time - first_data_received_time)来计算连接的累积平均每秒字节速度; (如果current_time和first_data_received_time相等,则注意可能除以零!)
如果你想做一些更精细的事情,比如过去10秒的跑动平均值,那就更复杂了,但计算累积平均值非常容易。
答案 1 :(得分:0)
我已经在网络上完成了一些任务,有一件事我注意到它不会像你想要的那样工作。我们必须完成服务器的发送 - 接收再次接收,还有其他因素阻止我们这样做......从MTU到缓冲区大小等我已经使用netperf来预测[是]之前的带宽。这就是你说的速度?]。代码是开源的。