我正在尝试在C中实现令牌桶算法...但我仍然坚持如何创建固定大小的突发,如10MB,20MB,100 MB等。
我的代码发送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
数组消耗大量内存?
有没有更好的标准方法呢?
答案 0 :(得分:0)
如果您正在讨论尝试实现特定数据速率,那么这是一个更复杂的问题。如果您只想发送更多数据,请将上面的代码放在循环中,并多次执行。 (例如:发送10MB,循环5次)。要在几秒钟内将其展开,您可以在循环中添加sleep(1)或其他类型的延迟(可能是nanosleep)。
执行数据速率的近似方法是使用较小的缓冲区大小,比如几K,然后计算发送它所需的延迟和循环次数。例如,使用32K缓冲区,在2秒内发送200MB,您将循环200M / 32K = 6400次。延迟 循环最多为2s / 6400 = 312500纳秒。当然,由于执行代码所花费的时间,通过套接字发送数据包所需的时间,任何网络延迟和数据包丢失等,这都不会接近确切。但它可能足够接近你的目的。