我想监控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();
由于
答案 0 :(得分:0)
有两种方法可以相当准确地解决问题:
您可以使用NTP并安装separate app like this one或使用库like this one在您的代码中实现它。
之后,您可以依靠System.currentTimeMillis()
来比较两台设备上的消息发送/接收时间。
您可以使用udp数据报(它们比tcp更快)实现类似icmp
echo的内容。算法应遵循(假设我们有设备A和B):
timeSent
; ACK
数据包发送给A; ACK
并保存timeRecv
; Long latency = (timeSent - timeRecv)/2;
。 这适用于小型有效负载,例如icmp
echo。测量大型网络传输时间可以通过为接收它的开始/结束发送单独的ACK
响应来完成。