1

我有一个 java 程序,当用户按下按钮时,它会向服务器发送一个 udp 数据包。客户端然后等待来自服务器的响应,并旨在记录从发送 udp 数据包到收到响应之间的时间(以毫秒为单位)。

我遇到了一个问题,即时间似乎不准确。它在大多数情况下都能正常工作,给出大约 160 毫秒的值(这是我所期望的)。然而,它有时会进入一个给出值太低(即低于 5 毫秒)的阶段。

我知道消息正在发送,因为我可以看到结果出现在服务器上(而且延迟肯定超过 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";
    }
}
4

1 回答 1

1

您的传输和接收可能重叠(或者是因为您的 sendMessage() 正在从多个线程调用,或者一个数据包被丢弃。

即,您发送当前请求,但收到来自先前请求的响应,这会产生响应时间非常快的错觉。

于 2012-04-04T03:41:03.030 回答