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

时间:2017-11-01 23:01:32

标签: android network-programming wifi-direct

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

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

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

TX:

                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);
                          }

RX:

                            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 个答案:

答案 0 :(得分:0)

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

  1. 在两台设备上同步时间
  2. 您可以使用NTP并安装separate app like this one或使用库like this one在您的代码中实现它。

    之后,您可以依靠System.currentTimeMillis()来比较两台设备上的消息发送/接收时间。

    1. 使用单个设备的相对时间或时间
    2. 您可以使用udp数据报(它们比tcp更快)实现类似icmp echo的内容。算法应遵循(假设我们有设备A和B):

      1. A向B发送一些数据包并在某处保存timeSent;
      2. B接收数据包并立即将ACK数据包发送给A;
      3. A接收ACK并保存timeRecv;
      4. 最后,Long latency = (timeSent - timeRecv)/2;
      5. 这适用于小型有效负载,例如icmp echo。测量大型网络传输时间可以通过为接收它的开始/结束发送单独的ACK响应来完成。