java套接字-测量发送所用的时间&;响应
我有一个java程序,当用户按下按钮时,它会向服务器发送udp数据包。然后,客户机等待服务器的响应,目的是记录udp数据包发送到接收响应之间的时间(毫秒) 我遇到了一个问题,时间似乎不准确。它在大多数情况下工作正常,给出的值约为160毫秒(这是我所期望的)。但是,它有时会进入一个给定值的阶段,该值非常低(即低于5ms) 我知道消息正在被发送,因为我可以看到结果显示在服务器上(而且延迟肯定超过1毫秒)。如果我多次向按钮发送垃圾邮件,则可能会出现此问题 我的代码如下:java套接字-测量发送所用的时间&;响应,java,sockets,Java,Sockets,我有一个java程序,当用户按下按钮时,它会向服务器发送udp数据包。然后,客户机等待服务器的响应,目的是记录udp数据包发送到接收响应之间的时间(毫秒) 我遇到了一个问题,时间似乎不准确。它在大多数情况下工作正常,给出的值约为160毫秒(这是我所期望的)。但是,它有时会进入一个给定值的阶段,该值非常低(即低于5ms) 我知道消息正在被发送,因为我可以看到结果显示在服务器上(而且延迟肯定超过1毫秒)。如果我多次向按钮发送垃圾邮件,则可能会出现此问题 我的代码如下: public String s
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";
}
}
您的发送和接收可能重叠(可能是因为您的sendMessage()正在从多个线程调用,或者是数据包被丢弃)
i、 e.您发送当前请求,但收到来自上一个请求的响应,这将产生一种响应时间非常快的假象。您的发送和接收可能重叠(可能是因为sendMessage()被多个线程调用,或者数据包被丢弃)
i、 e.您发送当前请求,但收到来自上一个请求的响应,这会给人一种响应时间非常快的假象。啊,我认为这似乎很有可能。关于如何解决这个问题,有什么想法吗?UDP定义为“尽力而为”。您必须在数据包中定义自己的协议(即序列号).@Adam Rogers尝试使用“发送时间”在消息中!我想我有点困惑。如果我按下“发送”键并得到1ms的响应,那么我假设我得到的是我之前“发送”的响应。在那一刻之前,我得到的响应比发送的多?啊,我认为这似乎很有可能。关于如何解决这个问题,有什么想法吗?UDP的定义是“尽最大努力”仅限。您必须在数据包中定义自己的协议(即序列号)。@Adam Rogers尝试将“发送时间”放在消息中!我想我有点困惑。如果我按“发送”并得到1ms的响应,那么我假设我得到的是来自上一次“发送”的响应。在那一刻之前,我的响应比发送的多?