我试图在C中实现令牌桶算法。但是,我被困在如何创建固定大小的突发,如10 MB,20 MB,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数组的大量内存?有什么更好更标准的方法吗??
发布于 2014-01-03 12:38:50
如果您正在讨论如何实现特定的数据速率,那么这是一个更复杂的问题。如果您只想发送更多的数据,那么将上面的代码放在一个循环中,并多次执行。(要发送10 do,请执行5次循环)。要将其扩展到多个秒,您可以在循环中添加一个睡眠(1),或者添加其他类型的延迟(可能是纳米睡眠)。
实现数据速率的一个近似方法是使用较小的缓冲区大小,例如几个K,然后计算发送它所需的延迟和循环数。例如,使用32K缓冲区,在2秒内发送200 to,您将循环200 m/32K= 6400次。循环中的延迟最多为2s/6400 = 312500纳秒。当然,由于执行代码所需的时间、通过套接字发送数据包所需的时间、任何网络延迟和数据包丢失等因素,这一点都不太准确。但就您的目的而言,它可能已经足够接近了。
https://stackoverflow.com/questions/20899328
复制相似问题