アプリ版:「スタンプのみでお礼する」機能のリリースについて

Javaを使って通信のプログラムを勉強しています。

UDP通信のスループットを測定するプログラムを作成しています。

送信側で5242880バイトを128回に分割して送信して、
受信側でそれらのパケットを受信する時間を計測するプログラムを
作りたいのですが、受信側でどのタイミングで受信処理を止めるのかがわかりません。

start = System.currentTimeMillis();
for(;;){
  socket.receive(RecvPacket);
  if(ループを抜ける条件)
    break;
}
stop = System.currentTimeMillis();

で受信し続けて、受信するパケットがなくなったらループを抜けるというように考えました。
UDPでは送信されたパケットがすべて届くという保証はないので、
128回受信したらループを抜けるというようにできないので、困っています。
届いたパケットの数も数えて到達率も計算したいです。

受信が終わったら、ループを抜けるというようにしたいのですが、
どうすればよいでしょうか?

A 回答 (1件)

DatagramSocket#setSoTimeout() を使って適当なタイムアウト時間を設定し、



* 128回受信する
* DatagramSocket#receive() から SocketTimeoutException が投げられる

のどちらかが満たされたらループを抜けるようにするのはどうでしょうか。

参考URL:http://java.sun.com/javase/ja/6/docs/ja/api/java …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

アドバイスしていただいたことを参考にやってみます。

お礼日時:2009/12/05 21:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!