重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

サーバ側では、クライアントが送信したバイトデータを受信させます。read()の戻り値を利用して、届いたバイトを確認します。
そして、サーバ側がクライアント側に、届いたバイトデータ分だけの
バイトデータを送信します。これらにかかる時間も計測するプログラムを作成しています。

サーバ側がバイトデータを受信し、その時間を計測する所までは、動いたのですが、
サーバ側がクライアント側に、バイトデータを送信する処理の、出力ストリームへの書き込みの処理でエラーが生じます。
Xつ目のバイト:書き込みエラーと表示されます。

なぜエラーになってしまうのでしょうか?送信と受信の処理部分のコードを載せるので、おかしな部分を指摘していただきたいです。

ServerSocket server = new ServerSocket(servPort);
Socket sock = server.accept();

BufferedInputStream in = new BufferedInputStream(sock.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(sock.getOutputStream());

long startNs = 0;
long stopNs = 0;
byte[] buf = new byte[1000000];
int total = 0, part;

System.out.println("<データ受信処理>");
startNs = System.nanoTime(); // 受信前の時間のナノ秒を返す。
while ((part = in.read(buf)) != -1) {
total += part;
System.out.println(part);
}System.out.println(part);
stopNs = System.nanoTime(); // 受信後の時間のナノ秒を返す。

System.out.println("受信完了");
System.out.println("受信されたバイト数:" + total);

// 受信スループットを計算する。
...

int count = 0; // write()の回数

System.out.println("<データ送信処理>");
for (int i = 0; i < total; i++) {
try {
out.write(i);
out.flush();
count++;
} catch (IOException e) {
System.err.println((count + 1) + "つ目のバイト:書き込みエラー");
}
}

// 結果を表示する。
System.out.println("送信完了");
System.out.println("送信されたバイト数:" + count);

A 回答 (2件)

現実の状況がよくわかりませんが、ふつうはクライアントがシャットダウンしたという解釈になるでしょう。



なお、write()メソッドは、引数はintでも実際にはbyteデータしか送れませんから、気をつけて。

参考URL:http://homepage1.nifty.com/algafield/jnet/sock.h …
    • good
    • 0
この回答へのお礼

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

教えていただいたサイトを見て参考にさせていただきました。

新しくソケットを作成したらエラーがなくなりました。

アドバイスをありがとうございました。

お礼日時:2009/11/24 14:00

発生しているIOExceptionの内容は?


System.err.println(e)とかe.printStackTrace()とかの結果を確認してください。
    • good
    • 0
この回答へのお礼

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

確認したところ、main tread -1というようなエラーが出ました。
なんとかエラーを解決することができました。

アドバイスありがとうございました。

お礼日時:2009/11/24 14:05

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