测量TCP连接速度
我想编写简单的测量TCP连接速度的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来测试带宽之前[这是你的速度正在谈论?]。该代码是开源的。
我真的很抱歉...我似乎无法对问题发表评论..不得不把它作为答案 – DarthCoder 2013-05-03 16:33:32
这看起来不一致,因为如果数据已经被接收并保存在等待传送给您的缓冲区中,它可能会很快返回,或者如果您必须等待远程系统选择。要首先解决您的问题,您必须决定“速度”的含义。例如,您可以对传输大文件的整个过程进行计时。但是要意识到TCP是为可靠性而设计的,而不是速度 - 尤其是低延迟意义上的速度。 – 2013-05-03 15:30:06