Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(BufferedInputStreamのreadメソッドについて)
閲覧数:1197
掲示板(BufferedInputStreamのreadメソッドについて)
名前
HK
題名 BufferedInputStreamのreadメソッドについて
質問内容

質問を評価する
(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");
        }
    }

質問日時 2013-08-23 20:07:47
名前
回答内容

回答を評価する
(0ポイント)
接続元が close していないのではありませんか?
回答日時 2013-08-24 20:55:40
回答内容を入力し、「確認」ボタンをクリックしてください。
ログインしていません。ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 ユーザIDをお持ちでない方は「ID登録」からユーザIDの登録を行ってください。
氏名 匿名
回答内容
 



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道