Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么UDP客户端发送数据的时间比服务器接收数据的时间长?_C_Sockets_Networking_Udp - Fatal编程技术网

C 为什么UDP客户端发送数据的时间比服务器接收数据的时间长?

C 为什么UDP客户端发送数据的时间比服务器接收数据的时间长?,c,sockets,networking,udp,C,Sockets,Networking,Udp,看起来它不应该那样工作。我在发送第一个数据包(大小为10字节,每次线性增加10字节)后启动时钟(在客户端),并在发送最后一个数据包后关闭时钟 在服务器端(数据包的接收者),我在收到第一个数据包后启动时钟,在收到最后一个数据包后停止。为什么发送时间比接收时间长 客户端模型代码(UDP发送方) 编译并运行服务器 user:socket$ g++ udp_server.cc -o udp_server user:socket$ ./udp_server user:socket$ g++ udp_c

看起来它不应该那样工作。我在发送第一个数据包(大小为10字节,每次线性增加10字节)后启动时钟(在客户端),并在发送最后一个数据包后关闭时钟

在服务器端(数据包的接收者),我在收到第一个数据包后启动时钟,在收到最后一个数据包后停止。为什么发送时间比接收时间长

客户端模型代码(UDP发送方)

编译并运行服务器

user:socket$ g++ udp_server.cc -o udp_server

user:socket$ ./udp_server
user:socket$ g++ udp_client.cc -o udp_client

user:socket$ ./udp_client 127.0.0.1
样本结果:

客户(发送方)

服务器(接收器)


基准测试是谎言,特别是如果你使用如此短的时间,也有数据包丢失

但我的猜测是,要找到服务器的MAC地址,需要进行ARP查找,因为这是将数据包传送到服务器网卡所必需的。只有在ARP响应之后,MAC才是已知的,并且第一个数据包才能被传送到服务器。客户端已经发送数据的所有时间。其中一些存储在发送缓冲区中,因为只要MAC未知(如果服务器和客户端位于同一网络中),就无法发送它们。由于发送缓冲区已满,一些可能已丢失

这意味着由于ARP查找造成的延迟,服务器接收第一个数据包的时间比客户端发送的时间晚得多。但是,在知道MAC之后,所有数据包都可以在没有进一步延迟的情况下交付,这样服务器将在客户端发送最后一个数据包后不久接收到它。由于开始时间较晚,结束时间大致相同,因此时间差较小,这可以解释您所看到的情况

user:socket$ g++ udp_server.cc -o udp_server

user:socket$ ./udp_server
user:socket$ g++ udp_client.cc -o udp_client

user:socket$ ./udp_client 127.0.0.1
The process took 0.238971 seconds.

A total of 211282500 bytes were sent.

The attempted data rate is: 884134476 bytes per second
The process took 0.042443 seconds.

A total of 211214670 bytes were received.

The actual data rate is: 4976431213 bytes per second