在 C 中的 UDP 客户端服务器中每秒计算吞吐量

标签 c sockets

我需要在 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/

相关文章:

创建唯一标识符——纯C

c - 在 Linux 上模拟电路和编程微 Controller

c# - TCP 套接字连接

java - Android 9 - 启用移动数据时套接字连接超时

python - 多线程 TCP 套接字

c - 未定义或未指定的行为?

将 char c = 'a' 转换为 int value = 10

c - 将两位数字转换为单词的简单 C 程序

C - 套接字编程 - 任意发送/接收 - 指针算术 - 数组不可分配

language-agnostic - 为什么写一个关闭的 TCP 套接字比读一个更糟糕?