如何测量两个 android 设备之间的传输时间?

How can I measure the transmission time between two android devices?

我想监控 Wifi-Direct 网络(带宽、延迟等)。如何测量通过网络(wifi direct)接收 X 字节所需的时间。我的意思是 TX + 通过网络 + RX 时间。

在DMMS (android Studio)中,我找到了网络统计选项,但这里只显示传输和接收时间(而且不是很准确,因为它出现在图表上)。

我曾考虑过使用 System.currentTimeMillis() 但我还没有找到如何同步两个设备的时钟。

发送:

                socket.bind(null);
                socket.connect((new InetSocketAddress(host, port)), SOCKET_TIMEOUT);
                int tamMensaje= 1024*1024; // 1 MB
                byte[] bitAleatorio = new byte [tamMensaje]; // 1 byte [-128 a 127
                for (int x=0;x<bitAleatorio.length;x++){
                    bitAleatorio[x] =(byte) Math.round(Math.random());
                }

                DataOutputStream DOS = new DataOutputStream(socket.getOutputStream());

                for(int i=0;i<1024;i++){
                    DOS.write(bitAleatorio,(i*1024),1024);
                          }

接收:

                            ServerSocket serverSocket = new ServerSocket(SERVERPORT);
                            Socket client = serverSocket.accept();
                            DataInputStream DIS = new DataInputStream(client.getInputStream());

                            int tamMensaje= 1024*1024;
                            byte[] msg_received2= new byte [tamMensaje];
                        for(int i=0;i<1024;i++){
                            DIS.read(msg_received2,(i*1024),1024);
                        }
                            client.close();
                            serverSocket.close();

谢谢

有两种方法可以相当准确地解决问题:

  1. 在两个设备上同步时间

您可以为此使用 NTP 并安装 separate app like this one or implement it in your code using a library like this one

之后您可以依靠 System.currentTimeMillis() 来比较消息在两个设备上的 sent/receive 时间。

  1. 使用相对时间或单个设备时间

您可以使用 udp 数据报(它们比 tcp 更快)实现类似 icmp echo 的功能。算法应该如下(假设我们有设备 A 和 B):

  1. A 向 B 发送一些数据包并保存 timeSent 某处;
  2. B收到数据包,立即发送ACK数据包给A;
  3. A收到ACK并保存timeRecv;
  4. 最后,Long latency = (timeSent - timeRecv)/2;

这适用于小负载,例如 icmp echo。测量大型网络传输时间可以通过为 start/end 和接收它发送单独的 ACK 响应来完成。