gpt4 book ai didi

c 程序 - 创建固定大小的突发

转载 作者:行者123 更新时间:2023-11-30 17:41:57 26 4
gpt4 key购买 nike

我正在尝试用 C 实现 token 桶算法...但我陷入了如何创建固定大小的突发(如 10MB、20MB、100MB 等)的困境。

我的代码发送 2MB 数据

for(i=0;i<2047;i++)
buffer[i] = 'a' ; // some char
if(sendto(sock_fd, buffer , 2048, 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
perror("\nmessage sending failed");
else
printf("message sent successfully");

我想,我只需要用我们想要的数量的字符填充缓冲区......这是正确的方法吗?我认为这会消耗 buffer 数组的大量内存?有更好的标准方法来做到这一点吗?

最佳答案

如果您正在谈论尝试实现特定的数据速率,那么这是一个更加复杂的问题。如果您只想发送更多数据,请将上面的代码放入循环中,并执行多次。 (例如:要发送 10MB,请循环 5 次)。要将其分散到几秒钟内,您可以在循环中添加 sleep(1) 或某种其他类型的延迟(可能是 nanosleep)。

计算数据速率的一个近似方法是使用较小的缓冲区大小(例如几 K),然后计算发送它所需的延迟和循环数。例如,使用 32K 缓冲区,要在 2 秒内发送 200MB,您将循环 200M/32K = 6400 次。延迟在循环最多为 2s/6400 = 312500 纳秒。当然,由于执行代码所需的时间、通过套接字发送数据包所需的时间、任何网络延迟和数据包丢失等,这不会接近精确。但对于您来说,它可能已经足够接近了目的。

关于c 程序 - 创建固定大小的突发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20899328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com