1

ユーザーがボタンを押すと、サーバーにudpパケットを送信するJavaプログラムがあります。次に、クライアントはサーバーからの応答を待機し、udpパケットが送信されてから応答が受信されるまでの時間をミリ秒単位で記録することを目的としています。

タイミングが正確に見えないという問題があります。ほとんどの場合、正常に動作し、約160msの値が得られます(これは私が期待するものです)。ただし、低い値(つまり、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 に答える