2012-04-04 8 views
1

ユーザーがボタンを押したときにudpパケットをサーバーに送信するJavaプログラムがあります。次に、クライアントはサーバーからの応答を待ち、udpパケットが送信されてから応答が受信されるまでの時間をmsで記録することを目指します。javaソケット - 送信と応答にかかる時間の測定

タイミングが正確ではないような問題があります。ほとんどの場合、ほぼ160msの値を与えています(これは私が期待しているものです)。しかし、時には低い(すなわち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

ああ、私はそれが非常に高いと思われると思います。この問題を回避する方法上の任意のアイデアは? –

+0

UDPは定義通りです "bes 「努力」のみ。パケット内に独自のプロトコル(つまり、シーケンス番号)を定義する必要があります。 –

+0

@Adam Rogersはメッセージに「send time」を入れようとしています! –

関連する問題