gpt4 book ai didi

计算接收/发送数据的时间以计算带宽

转载 作者:行者123 更新时间:2023-11-30 17:43:12 24 4
gpt4 key购买 nike

我有一个数据包嗅探器(见下文)。为了测量带宽,我想我需要在接收数据开始时启动一个计时器。记录已传输的字节数,然后计算平均带宽。为了测量接收/发送数据的时间,我做了:

int main() {
//usual packet sniffer staff up untill while loop
struct pcap_pkthdr header;
const unsigned char *packet;
char errbuf[PCAP_ERRBUF_SIZE];

char *device;
pcap_t *pcap_handle;

int i;
device = pcap_lookupdev(errbuf);
if (device == NULL) perror("pcap_lookupdev failed");

printf("Sniffing on device %s\n", device);

pcap_handle = pcap_open_live(device, 4096, 1, 0, errbuf);
if (pcap_handle == NULL) perror("pcap_open_live failed");

while (1) {
//starting the timer
double diff = 0.0;
time_t start;
time_t stop;
char buff[128];
time(&start);

//receiving packet
packet = pcap_next(pcap_handle, &header);

//stopping the timer
time(&stop);

//measuring time of receiving data
diff = difftime(stop, start);

process_packet(packet, header.len, diff);
}

}

diff 结果总是 0.0000,这可能是错误的。我的理解是否正确,如果是,代码有问题吗?

我也尝试使用毫秒:

float diff;
clock_t start;
clock_t stop;
char buff[128];
start = clock();

packet = pcap_next(pcap_handle, &header);//just creates a pointer in no time

stop = clock();
diff = (((float)stop - (float)start) / 1000000.0F ) * 1000;

相同的输出...

最佳答案

样本数量不足或时钟太粗糙。

开始和停止之间的数据包数量可能太小。 time_t 通常只有 1 秒的分辨率。 clock_t 具有实现定义的每秒滴答数 CLOCKS_PER_SEC。我见过 18.2 或 100 或 1000 等值。它也可能不足以容纳 1 个数据包。

建议将字节传输时间增加到至少 10 倍时钟周期。因此,如果您使用 time_t 并以 19,200 波特率运行,则传输 192,000 字节。

为了保持一致性,同步开始时间会有所帮助。下面的示例适用于 clock_t,只需相应缩放即可。

// sync
time_t was;
time(&was);
time_t now;
do {
time(&now);
} while (now == was);

// do test
do_test(); // about 10 seconds;

// results
time_t later;
time(&later);
time_t delta = late - now;
BitsPerDataByte = 1+8+1;
double TestedBaud = 1.0*DataBytesSent*BitsPerDataByte/delta;

关于计算接收/发送数据的时间以计算带宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20289586/

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