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