我需要在 C
中计算客户端和服务器之间的 UDP 连接的吞吐量,问题是,我需要每秒执行此操作并绘制有关的图表这。鉴于我在 C
中以固定间隔发送数据包,我正在寻找有关如何执行此操作的想法?
我的客户端代码是这样的:
for(int i = 0;i < num_messages;i++){
int bytes_sent = sendto(socket_id, &rtt_struct, sizeof(rtt_struct), 0, (struct sockaddr *) &server_addr, addr_size);
int bytes_rcvd = recvfrom(socket_id, &new_rtt_struct, sizeof(new_rtt_struct), 0, (struct sockaddr *) &server_addr, &addr_size);
sleep(interval);
}
其中,num_messages
是我发送到服务器的数据包数。
最佳答案
我建议采用以下方法:
- 对低级发送和接收函数使用包装器,它会更新已发送和已接收字节的全局计数器。
- 为
SIGALRM
安装信号处理程序,每秒调用一次 (alarm(1);
)。您可以使用sigaction(2)
来消除每次调用都重新安装它的需要,但是您必须在信号处理程序中调用alarm()
才能重新启动计时器。 - 每次调用信号处理程序时,读取并重置全局计数器并处理字节计数(即将其写入稍后用于生成图形的数据结构)
为了创建图表,我强烈建议使用 rrdtool/librrd。
关于在 C 中的 UDP 客户端服务器中每秒计算吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42456578/