У меня возникла проблема с использованием цикла while, окружающего BufferedReader в Java. Я делаю некоторые эксперименты с Sockets.Застревание в цикле While с использованием BufferedReader
Мой текущий код:
InetAddress address = InetAddress.getByName(this.IP);
SocketAddress socketaddress = new InetSocketAddress(address, this.port);
Socket socket = new Socket();
socket.connect(socketaddress);
if(socket.isConnected()){
Executor.logger.info("Connection to proxy established!");
}
else {
Executor.logger.warning("Connection to proxy failed!");
socket.close();
return;
}
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String temp2;
while((temp2 = in.readLine()) != null){
Executor.logger.info("Running query says " + temp2);
}
Но независимо от того, что я пытался код не будет переходить к следующей строке. Это не спам моего регистратора ни с чем, он просто внезапно останавливается и застревает.
Это только клиентская сторона, и я не контролирую серверную часть получателя.
Я что-то не так?
Благодарим за любую помощь заранее.
редактирует
Сервер командной строки, которая принимает команду с переменными и возвращается с кодом, который говорит вам результат того, что вы сделали. Однако при первом подключении он возвращает что-то вроде сообщения, пустой строки, сообщения, пустой строки, которая является петлей, которая в настоящее время застревает.
Он * блокирует * на 'readLine()', потому что он ждет данных. Соединение не закрыто, поэтому 'readLine()' не возвращает 'null', но никаких данных не поступает, поэтому он продолжает ждать поступления данных. Предположительно, сервер ждет ввода от вас, пока он не вернет больше данных. Вам также нужен другой поток для записи, чтобы вы могли получать данные и отправлять данные одновременно. – Kayaman
Есть ли способ обнаружить, когда BufferedReader пуст? Мне нужен код для продвижения, поскольку он базируется внутри конструктора. – Harieo
Вы должны использовать поточный прослушиватель, такой как DataFetcher: https://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/io/DataFetcher.java – ControlAltDel