Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java套接字-测量发送所用的时间&;响应_Java_Sockets - Fatal编程技术网

java套接字-测量发送所用的时间&;响应

java套接字-测量发送所用的时间&;响应,java,sockets,Java,Sockets,我有一个java程序,当用户按下按钮时,它会向服务器发送udp数据包。然后,客户机等待服务器的响应,目的是记录udp数据包发送到接收响应之间的时间(毫秒) 我遇到了一个问题,时间似乎不准确。它在大多数情况下工作正常,给出的值约为160毫秒(这是我所期望的)。但是,它有时会进入一个给定值的阶段,该值非常低(即低于5ms) 我知道消息正在被发送,因为我可以看到结果显示在服务器上(而且延迟肯定超过1毫秒)。如果我多次向按钮发送垃圾邮件,则可能会出现此问题 我的代码如下: public String s

我有一个java程序,当用户按下按钮时,它会向服务器发送udp数据包。然后,客户机等待服务器的响应,目的是记录udp数据包发送到接收响应之间的时间(毫秒)

我遇到了一个问题,时间似乎不准确。它在大多数情况下工作正常,给出的值约为160毫秒(这是我所期望的)。但是,它有时会进入一个给定值的阶段,该值非常低(即低于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";
    }
}

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


i、 e.您发送当前请求,但收到来自上一个请求的响应,这将产生一种响应时间非常快的假象。

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


i、 e.您发送当前请求,但收到来自上一个请求的响应,这会给人一种响应时间非常快的假象。

啊,我认为这似乎很有可能。关于如何解决这个问题,有什么想法吗?UDP定义为“尽力而为”。您必须在数据包中定义自己的协议(即序列号).@Adam Rogers尝试使用“发送时间”在消息中!我想我有点困惑。如果我按下“发送”键并得到1ms的响应,那么我假设我得到的是我之前“发送”的响应。在那一刻之前,我得到的响应比发送的多?啊,我认为这似乎很有可能。关于如何解决这个问题,有什么想法吗?UDP的定义是“尽最大努力”仅限。您必须在数据包中定义自己的协议(即序列号)。@Adam Rogers尝试将“发送时间”放在消息中!我想我有点困惑。如果我按“发送”并得到1ms的响应,那么我假设我得到的是来自上一次“发送”的响应。在那一刻之前,我的响应比发送的多?