java套接字 - 测量发送时间和时间响应

时间:2012-04-04 03:24:53

标签: java sockets

我有一个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";
    }
}

1 个答案:

答案 0 :(得分:1)

你的发送和接收可能是重叠的(因为你的sendMessage()是从多个线程调用的,或者是一个数据包被丢弃了。

即。您发送当前请求但接收来自先前请求的响应,这将产生非常快的响应时间的假象。