• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:帯域測定プログラムに関する質問)

帯域測定プログラムを作成する方法について

このQ&Aのポイント
  • eclipse3.5を使用してTCPとUDPの2種類の帯域測定プログラムを作成する方法についてご教示ください。
  • プログラムの引数としてIPアドレス、ポート番号、バイト量、開始時間を指定する方法について教えてください。
  • 現在の時間を指定する方法について説明していただけませんか?

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

  • ベストアンサー
  • komi1341
  • ベストアンサー率65% (25/38)
回答No.2

> 2009/01/01/01 00:00:00をミリ秒に変換する方法 java.util.Calendarクラスでできます。set()、setTimeInMillis()、getTimeInMillis()あたりのメソッドが使えるでしょう。詳細はリファレンスを参照ください。 > komi1341さんはどういった方法で、計測を行うべきだとお考えでしょうか? 前にも書きましたが、私は通信分野の専門家ではありません。ですので「帯域測定」というのが具体的に何を測定することなのか、正確には理解していません。測定対象が分からないのですから当然、どう計測を行うべきかも分かりません。 でももしデータを一方から他方へ送るだけの片道通信なら、時計を合わせないと速度は計れないでしょう。これは明白ですね。 ですがもしデータの往復時間を計ろうとしているのなら(どうもそのようですが)、例えばWebだとアップロードとダウンロードとで速度が違いますよね。ですのでどういう環境かにもよりますが、単にデータが往復する時間を2で割ったものとか、往復時間そのものを使った計算結果を「帯域速度」みたいに呼べるものなのかな、と。 あーこの人基本が分かってないな、と思うようでしたら無視してもらっていいですよ。そもそものご質問の趣旨から離れていますしね。気になれば自分で勉強します。私の書き方で変に混乱させてしまったようなら申し訳ないです。

debukawa
質問者

お礼

回答ありがとうございます。 komi1341さんのおっしゃったクラスを使ってやってみます。 できなければまた質問させていただきますので、お願いします。

その他の回答 (3)

  • komi1341
  • ベストアンサー率65% (25/38)
回答No.4

> どうして一致しないのでしょうか? ループを一周するのに2ミリ秒以上かかることがあれば、一致しないこともあるでしょう。 > そもそも、指定した時間と現在の時間が一致したら、作業開始させる > という方法がまずいのでしょうか? 個人的にはその機能自体不要に思われますが…データ送信時刻を送信直前にプログラム内で取得すれば済む話では? 何のための時間指定なのかが分からないので、方法がまずいかまずくないかも判断できません。

debukawa
質問者

お礼

回答ありがとうございます。 試行錯誤した結果、何とか完成しました。 forを書く位置が悪かったようです。 たくさんのアドバイスありがとうございました。

  • komi1341
  • ベストアンサー率65% (25/38)
回答No.3

> できなければまた質問させていただきますので なるべくご自身で勉強されることをお勧めします。 今回の件もAPIリファレンスを見たり、「java ミリ秒 日時 変換」といったキーワードで検索すればすぐ分かったと思いますよ。

debukawa
質問者

お礼

回答ありがとうございます。 教えていただいた検索のキーワードで検索したら、 よいサイトを見つけました。そこを参考にして作りました。 Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(year, month, date, hourOfDay, minute, second); long TimeMs = calendar.getTimeInMillis(); これで指定した時間をミリ秒に変換することができました。 次は指定した時間になったら送信作業を開始するようにしたいのですが、 その方法が分かりません。 for (;;) {  long Ms = System.currentTimeMillis();  if (TimeMs == Ms)   break; } というようにしてもできません。 私の考えでは、指定した時間のミリ秒と現在の時間のミリ秒が同じに なったときに、ループを抜け、送信作業に進ませたいのですがうまく いきません。 System.out.println(TimeMs); // 指定した時間のミリ秒 System.out.println(Ms); // 現在のミリ秒 これらを使って時間のミリ秒を見てみました。 指定した時間になっても、Msの方の値は、指定した時間のミリ秒(TimeMs) と一致しません。 どうして一致しないのでしょうか? そもそも、指定した時間と現在の時間が一致したら、作業開始させる という方法がまずいのでしょうか? 分かる方、アドバイスお願いします。

debukawa
質問者

補足

もう少し調べてみたらできました。 monthは0から始まるので calendar.set(year, month, date, hourOfDay, minute, second);の部分を calendar.set(year, month-1, date, hourOfDay, minute, second);としたら 指定した時間に動きました。 動いたのですが、計測開始時間までの待ち時間が計測結果時間に影響を及ぼしてしまいます。たぶん、「表示される時間=待ち時間+計測した時間」というようになっています。 これは、komi1341さんがおっしゃっていたサーバ側とクライアント側で時刻設定が行われていないからなのでしょうか?

  • komi1341
  • ベストアンサー率65% (25/38)
回答No.1

> Ms=System.currentTimeMillis(); > System.out.println(Ms); > で現在の時間の表記の仕方を確認しても、私にはでたらめな数値にしか見えず、 そういうときはまずAPIリファレンスを確認しましょう。 http://java.sun.com./javase/ja/6/docs/ja/api/index.html 左下からSystemクラスを選べば、currentTimeMillis()が返す数字が何なのか、ちゃんと書かれています。 それを「何時何分」みたいな形にしたいのであれば、Dateクラス、SimpleDateFormatクラスについて調べてみてください。ただ通信時間の計測に「何時何分」という表記が必要とはあまり思えませんが。 あと通信についてはあまり詳しくないのですが、サーバ側とクライアント側で時刻設定が異なっていたら気をつける必要がないですか? すでに考慮済みであればいいのですが。

debukawa
質問者

お礼

回答ありがとうございます。 教えていただいたサイトで確認したところ、ミリ秒を返すことと分かりました。 作りたいプログラムのことを説明します。 例えば2009/01/01/01 00:00:00に計測を開始するとしたら、 引数を「IPアドレス ポート番号 バイト量 2009/01/01/01 00:00:00」 というようにしようと考えています。ですから、「何時何分」という表記に変換する必要があると考えていました。 そしてプログラムの中で、2009/01/01/01 00:00:00をミリ秒に変換して、 もし、Ms=System.currentTimeMillis();とその変換した値が同じになった ら計測を開始させたいのです。 ですから、現在は2009/01/01/01 00:00:00をミリ秒に変換する方法を Webサイトで探しています。ですが、時間を表す文字列をミリ秒に変換する 方法がなかなか見つかりません。 >ただ通信時間の計測に「何時何分」という表記が必要とはあまり思えませんが。 ということですが、komi1341さんはどういった方法で、計測を行うべきだとお考えでしょうか? >サーバ側とクライアント側で時刻設定が異なっていたら気をつける必要がないですか? クライアント側で、開始時間になったら、バイトを送信するというように考えています。ですからサーバ側とクライアント側で時刻設定が異なっていても大丈夫だと考えているのですが、この考えはまずいでしょうか?

関連するQ&A