Android - Medir tiempo que tarda en llegar un mensaje a otro dispositivo

 
Vista:

Medir tiempo que tarda en llegar un mensaje a otro dispositivo

Publicado por Pep (1 intervención) el 28/10/2017 18:24:37
Hola, estoy desarrollando un aplicación en Android mediante la cual quiero intercambiar bastantes bytes entre dos dispositivos para conocer datos acerca del rendimiento de la red. Este intercambio se produce mediante la tecnología Wifi Direct.

Para el envío de bytes uso sockets y me gustaría saber, como he comentado anteriormente, como puedo medir en la propia app parámetros de rendimiento de la red como el ancho de banda, bits erróneos o paquetes fallidos. Especialmente me interesa el tiempo que tarda en llegar un mensaje de un dispositivo a otro.

Había pensado en usar System.currentTimeMillis() , pero al usar dos dispositivos diferentes los relojes de ambos deberían estar sincronizados y no encuentro la manera de llevar esto a cabo.

Con el DMMS de Android Studio, hay una herramienta que es network statistics, que me muesstran el tiempo y la velocidad(no son datos muy exactos ya que se remite a la grafica). No estoy muy seguro pero me parece que este tiempo hace referencia al tiempo que tarda en enviar, y tiempo que tarda en recibir, en lugar del tiempo que tarda en llegar el mensaje de un punto a otro, que es lo que a mí me interesaría,no se si me podeis aclarar esto.


En resumen lo que me interesa es medir ese tiempo que tarda desde un punto a otro teniendo en cuenta que son dos dispositivos diferentes.

Parte en la que envío:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
socket.bind(null);
 
                    socket.connect((new InetSocketAddress(host, port)), SOCKET_TIMEOUT);
                    int tamMensaje= 1024*1024; // 1 MByte de tamano de mensaje
                    byte[] bitAleatorio = new byte [tamMensaje]; // 1 byte, de -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);
                              }


Parte en la que recibo:

1
2
3
4
5
6
7
8
9
10
11
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();


Gracias.
Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder