После чтения из сокета не удается записать

#java #sockets #bufferedreader

#java #сокеты #bufferedreader

Вопрос:

У меня есть сайт клиента и сервера. Сервер работает хорошо, но клиентский сайт, когда я пытаюсь прочитать, нет.

Но когда я удаляю этот код, он работает:

 while((read = br.readLine()) != null){
    System.out.println("in reading");
    finale  = read;
    output.setText(finale);
}           
br.close();
 

Вот полный код:

 try{
    Socket connection = new Socket("localhost",PORT);
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(connection.getOutputStream()));
    BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    pw.println("hi connection estabilished");
    pw.flush();
    String str,read = "",finale = "";
    while(connection.isConnected()){
        System.out.println("start");
        if(zapis == true){
            str = input.getText();
            pw.println(str);
            pw.flush();
            input.setText("");
            zapis = false;
        }
        System.out.println("top of the reading");
        while((read = br.readLine()) != null){
            System.out.println("in reading");
            finale  = read;
            output.setText(finale);
        }           
        br.close();
    }
} catch(IOException e) { 
    System.out.println("error "   e); 
}
 

Это просто класс для прослушивания действия моей кнопки

 class Listener implements ActionListener{

@Override
public void actionPerformed(ActionEvent e) {
    Main.zapis = true;
}   
}
 

Комментарии:

1. можете ли вы попробовать этот PrintWriter pw = new PrintWriter(новый OutputStreamWriter(connection.getOutputStream()), true);

2. Что значит «это не работает»? Какое-либо исключение?

3. @ThomasUhrig Я не могу записать в этот сокет

4. Опять же: какое-либо исключение? Программа блокируется? Ваш компьютер загорается? «Не удается записать» не предоставляет никакой информации.

5. Никаких исключений, ничего, никаких ошибок

Ответ №1:

По-видимому, вы открываете br вне цикла while(connection.isConnected()){ , но закрываете его в цикле.

Вы должны попытаться записать свой последний блок (тот, который заставляет его работать при его удалении) как :

     System.out.println("top of the reading");
    while((read = br.readLine()) != null){
        System.out.println("in reading");
        finale  = read;
        output.setText(finale);
    }           
}
br.close();
 

с закрытием вне цикла.