Я изучаю java и сталкивался с некоторыми проблемами с сокетами. Я разработал простое приложение клиент-сервер - вид стук-стук, он выполняет 4 шага:Сокеты, BufferedReader.readline() - почему поток не готов?
- клиент посылает какое-то сообщение на сервер
- сервер получит их и сохраняет в файл
- сервер отправляет обратно клиенту некоторые другие сообщения
- клиент recieves их, а также экономит на файл на шаге 4
появляется проблема: клиент не получает сообщения и никогда не выходит из цикла:
while ((inStr = in.readLine()) != null) {
writer.println(inStr);
}
где есть тип BufferedReader
:
try {
socket = new Socket(ipAddress, 4444);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
На на стороне сервера сообщений посылаются:
try {
socket = srvSocket.accept();
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
...
out.println("test from server #1");
out.println("test from server #2");
на стороне клиента я наблюдал in.ready()
- он возвращает false. На стороне сервера я смотрю out.checkError()
- он возвращает true;
Что я делаю неправильно - почему поток пуст?
Любая помощь ia оценивается! :)
Любые исключения? – Tudor
попробуйте 'out.flush()' после того, как вы написали строки. – nos
@Sergio: Где находится код сервера, который отправляет сообщения, как вы говорите? –