• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UDP:送信レートについて)

UDP送信レートの改善方法とは?

このQ&Aのポイント
  • UDPで帯域測定プログラムを作成しましたが、送信レートを改善したいと考えています。
  • 現在のプログラムには100個のパケットを送信する処理と無駄なループがありますが、より効率的な方法を模索しています。
  • もし他の良い方法があれば、アドバイスをいただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

> 私の作ったプログラムは、紹介していただいたサイトのプログラムのようにスレッド化していません。 > ですから、スリープはできないと思うのですが、どうすればよいでしょうか? マルチスレッド化していなくても、メインのスレッドは1本走っています。 http://d.hatena.ne.jp/konchi/20090911/1252646115 あとは「i回目のsleep終了予定時刻」は「送信開始から(i+1)×10ミリ秒後」になるので、それと、sleep開始時刻との差が、sleepすべき時間になります。 ですから、socket.send の次に Thread.sleep((i+1)*10-(System.nanoTime()-send_start)/1000000); を入れることでいけると思います。

debukawa
質問者

お礼

回答ありがとうございます。 アドバイスしていただいたことを参考したらうまくできました。 ありがとうございました。

その他の回答 (1)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

「無駄なループ」はやめましょう。それこそ、無駄にCPUパワーを消費していまいます。 それよりも、Sleep を使ってください。 http://msugai.fc2web.com/java/thread/sleep.html

debukawa
質問者

お礼

回答ありがとうございます。 私の作ったプログラムは、紹介していただいたサイトのプログラムのようにスレッド化していません。 ですから、スリープはできないと思うのですが、どうすればよいでしょうか? 私の作ったプログラムを載せます。ご指導していただければ幸いです。 import java.net.*; import java.io.*; public class UDPSpeedClient {   public static void main(String[] args) throws IOException {     final int BUF_MAX = 500;     if (args.length != 2)       throw new IllegalArgumentException("Parameter(s):<Server><Port>");     InetAddress host = InetAddress.getByName(args[0]);     int port = Integer.parseInt(args[1]);     long send_start;     long send_stop;     int send_total = 0;     byte[] send_buf = new byte[BUF_MAX];     DatagramSocket socket = new DatagramSocket();     send_start = System.nanoTime();     System.out.println("送信開始");     for(int i = 0;i<100;i++){       DatagramPacket sendPacket = new DatagramPacket(send_buf,BUF_MAX,host,port);       send_total += BUF_MAX;       try{         socket.send(sendPacket);         for(;;){           // ここで時間を稼ごうとしています。           break;         }       }catch(IOException e){         System.out.println(e);       }     }     send_stop = System.nanoTime();     System.out.println("送信完了");     //結果表示     socket.close();     } }

関連するQ&A

専門家に質問してみよう