Socket застревает при выполнении readLine ()

Я пытаюсь подключиться к POP-серверу через Sockets в Java. Я выполнил следующий код, чтобы запустить команду LIST, чтобы отобразить все электронные письма с сервера. Но я не знаю, почему на второй readLine (), чтобы прочитать вторую строку и далее, мое приложение там зависает.

popSock = new Socket(mailHost, pop_PORT); inn = popSock.getInputStream(); outt = popSock.getOutputStream(); in = new BufferedReader(new InputStreamReader(inn)); out = new PrintWriter(new OutputStreamWriter(outt), true); //USER and PASS commands to auth the server are ok out.println("LIST"); String response = in.readLine(); System.out.println(response); //Attempt to read the second line from the buffer but it hangs at here. response = in.readLine(); System.out.println(response); 

На втором in.readLine() приложение застряло здесь и не исходит отсюда. Когда я запускаю команду LIST в telnet, я получаю весь список писем. Поэтому я должен получить тот же ответ от сокета, но я не уверен. Как читать весь ответ по строкам с сервера?

ReadLine () не вернется, пока не будет прочитан возврат каретки или фид строки, что вы обычно получаете при чтении с терминала или текстового файла.

Я не удивлюсь, если POP-сервер на самом деле не наклеит \ n \ n в конце своих сообщений. Вместо этого попробуйте прочитать ().

Вы должны отправлять \ r \ n после каждой команды, также не пытайтесь использовать BufferedInputStream, попробуйте прочитать непосредственно из байта InputStream by byte, чтобы увидеть, в какой момент он фактически зависает. BufferedInputStream может быть висит, ожидая, чтобы прочитать больше, прежде чем возвращать то, что он уже прочитал.

Попробуйте прочитать его по одному символу за раз, используя in.read и распечатав его. Возможно, есть проблема с символом новой строки, который отправляет сервер.

Вы можете попробовать следующее:

  try { String line = inn.readLine(); while(***input.ready()***) { System.out.println(line); line=inn.readLine(); } inn.close(); } catch (IOException e) { e.printStackTrace(); } в  try { String line = inn.readLine(); while(***input.ready()***) { System.out.println(line); line=inn.readLine(); } inn.close(); } catch (IOException e) { e.printStackTrace(); } 

Где inn – ваш объект bufferedReader, в котором хранятся данные inputstreamdata