質問内容
質問を評価する
(0ポイント)
|
メッセージと画像ファイルを送受信するチャットシステ ムを作っているのですが、画像ファイルのバイナリデー タサーバー側で受信する際にBufferedInputStreamの readを使っているのですが、ストリームの終わりになる と-1になるのにならず、受信待機状態に入ってしまいま す。buf配列の中身を確かめたところ、データ自体は最 後まで入っていました。しかし、なぜ-1として返されな いのか分りません。 クライアント側 public Client(String host, int port) { try { socket = new Socket(host, port); inputstream = socket.getInputStream(); outputstream = socket.getOutputStream();
} catch (IOException e) { socket = null; System.out.println("Client Err!"); } }
// ソケットを入手 public Socket getSocket() { this.socket = socket; return socket; } // メッセージ送信 public boolean write(String Message) { File file = null; int size = 0; String str = null; byte[] buf = new byte[1000]; int len = 0; try { output = new BufferedOutputStream(outputstream); outputMessage = new OutputStreamWriter(outputstream); outputMessage.write(Message + "\r\n"); outputMessage.flush(); str = Message.substring(Message.length() - 3);// 最後か ら3文字を読み取る if (str.equals("jpg")) { inputbyte = new BufferedInputStream(inputstream); long start = System.currentTimeMillis(); // System.out.println("送信するファイル名" + Message); file = new File("Client/" + Message); FileInputStream inputfile = new FileInputStream(file);
while ((len = inputfile.read(buf)) != -1) { output.write(buf, 0, len); output.flush(); size += len; System.out.println(size + "バイトの送信完了"); } } } catch (Exception e) { System.out.println("Miss Send"); return false;
} return true; } サーバー側 while (thread != null) { // 入力待ちのループ // データをサーバ ーから受け取る準備 File file = null; int len = 0; int size = 0; long time = 0; if ((s = inputMessage.readLine()) != null) { str = s.substring(s.length() - 3);// 最後から3文字を読み 取る System.out.println("受信した文字は" + s + "で す。"); System.out.println("受信した文字の最後から三文字目 は" + str + "です。"); if (str.equals("jpg")) { while ((len = input.read(buf)) != -1) {
// 全クライアントにブロードキャストする server.Bytebroadcast(buf, s, len); size += len; } System.out.println("whileにて"+size + "バイトの受 信完了"); } else { // 全クライアントにブロードキャストする server.broadcast(handle + " : " + s); } } } } catch (IOException e) { close(); // エラーを起こし たら、接続を切断する } } // 接続を切断する public void close() { try { // input.close(); // スト リームを閉じる // inputMessage.close(); outputMessage.close(); output.close(); socket.close(); // ソケッ トを閉じる
socket = null; server.broadcast("# 回線切 断 :" + handle); stop(); } catch (IOException e) { System.out.println("Close Err"); } }
|