#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();
с закрытием вне цикла.