我有一个java程序,当用户按下按钮时,它会向服务器发送一个udp数据包。然后,客户端等待来自服务器的响应,并且旨在记录发送udp分组和接收响应之间的时间(以毫秒为单位)。
我遇到的问题是时间似乎不准确。它大部分时间工作正常,给出大约160ms的值(这是我所期望的)。然而,它有时进入给出低值(即低于5ms)的值的阶段。
我知道正在发送消息,因为我可以看到结果出现在服务器上(它肯定超过1毫秒的延迟)。如果我多次向按钮发送垃圾邮件,似乎会出现此问题。
我的代码如下:
public String sendMessage(String message){
long startTime = System.currentTimeMillis();
sendData = message.getBytes();
try{
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String returnString = new String(receivePacket.getData());
//arg1 message, arg2 - transmit time
addConsoleLine(returnString, System.currentTimeMillis() - startTime);
return returnString;
}catch (Exception e){
return "error";
}
}
答案 0 :(得分:1)
你的发送和接收可能是重叠的(因为你的sendMessage()是从多个线程调用的,或者是一个数据包被丢弃了。
即。您发送当前请求但接收来自先前请求的响应,这将产生非常快的响应时间的假象。