TCP通信のプログラム(java)
javaを使ってTCP通信のプログラムを作りました。
そのプログラムは次のような動作をさせたいですが、途中までしか動作確認がとれません。
1. 送信側で指定したバイト数のデータを送信する。それにかかった時間を計測する。
2. 送信されたバイトデータを受信する。届いたバイト数の確認をするとともに、受信にかかった時間を計測する。
3. 受信側は1.で行った処理と同じようにして、届いたバイト数分のデータを返信する。
4. 3.で送信側に送信されたデータを受信して、受信時間を計測する。届いたバイト数を確認する。
2.までは、正常に動作します。正常な動作とは、
送信側は、指定した数のバイトデータを送信して、それにかかった時間を計る。
受信側は、送信されたデータを受信して、それにかかった時間を計り、届いたバイト数を確認する。ちなみにこの2つの時間はほぼ同じになります。
ここまではできています。
ですが、送信側が受信側で届いたバイト数分のデータを送信し、送信側でそのデータを受信してその時間を測るというコード(//*受信処理*//という行から下)を追加するとうまくいきません。
受信側では、//*受信処理*//という行から下を追加すると、うまくいきません。
送信と受信処理のコードを載せます。
送信側(送信バイト数は入力させます)
Socket sock = new Socket(host, port);
BufferedOutputStream out = new BufferedOutputStream(sock.getOutputStream());
BufferedInputStream in = new BufferedInputStream(sock.getInputStream());
//*送信処理*//
// 送信データを送信する。
int count = 0; // write()の回数
System.out.println("<データ送信処理>");
start = System.nanoTime(); // 計測開始時間
for (int i = 0; i < Data; i++) {
try {
out.write(i);
out.flush();
count++;
} catch (IOException e) {
System.err.println((count + 1) + "つ目のバイト:書き込みエラー");
}
}
stop = System.nanoTime(); // 計測終了時間
System.out.println("送信完了");
System.out.println("送信されたバイト数:" + count);
// 送信スループットを計算する。
// 結果を表示する。
//*受信処理*//
// 変数を定義する。
long startNs = 0; // 受信前の時間のナノ秒を返す。
long stopNs = 0;
byte[] buf = new byte[1000000];
int total = 0, part;
// ストリームの終わりに達し,-1が返されるまで受信する。
System.out.println("<データ受信処理>");
startNs = System.nanoTime();
while ((part = in.read(buf, 0, buf.length)) != -1) {
total += part;
System.out.println(part);
}
stopNs = System.nanoTime();
System.out.println("受信完了");
System.out.println("受信されたバイト数:" + total);
// 受信スループットを計算する。
// 結果を表示する。
// 出力ストリーム・ソケットをクローズする。
out.close();
sock.close();
受信側のコードは補足欄に載せます。このコードだと、
送信側の計測結果は表示されますが、受信側で受信時間や受信速度などが表示されません。
送信側で通信を強制終了すると、その後に受信側は、結果を表示します。
データを片道ではなく往復させて、それらの処理時間を計測したいのです。うまくいかないのでアドバイスを頂きたいです。
このコードのおかしい部分が分かる方はアドバイスをお願いします。
コードが見にくくて意味がわからないかもしれませんが、そうならば、データを往復させてその時間を測るためのアドバイスをお願いします。
補足
すいませんでした 再送のタイムアウトことです。