2012-04-04 36 views
1

采取我有当用户按下一个按钮,用于发送一个UDP分组到服务器的Java程序的时间。然后客户端等待来自服务器的响应,旨在记录时间在毫秒之间时,UDP数据包被发送和接收响应时。java的插座 - 测量为发送响应&

我有一个问题,由此定时似乎不准确。它工作正常,大部分的时间给周围160毫秒的值(这是我所期望的)。然而,它有时会进入一个给出低值(即低于5ms)值的阶段。

我知道的消息被发送,我可以看到的结果出现在服务器上(它比1ms的延迟肯定更)。如果我多次发送垃圾按钮,这个问题似乎就会发生。

我的代码如下:

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

及其可能的发送和接收是重叠的(或者是因为你的sendMessage()被从多个线程,或调用,分组被丢弃

即你发送当前的请求,但收到前一个请求的响应,这将给出一个非常快速的响应时间的错觉

+0

啊,我认为这似乎很有可能,有关如何解决此问题的任何想法? – 2012-04-04 03:47:50

+0

UDP的定义是“bes t努力“只。您必须在数据包中定义自己的协议(即序列号)。 – 2012-04-04 03:58:16

+0

@Adam罗杰斯尝试把“发送时间”的消息! – 2012-04-04 05:54:48