Я немного зациклен на том, как избежать того, чтобы мой сокет висел на чтении. Здесь мой код:
Socket socket = new Socket("someMachine", 16003);
OutputStream outputStream = socket.getOutputStream();
InputStream inputStream = socket.getInputStream();
try {
outputStream.write(messageBuffer.toByteArray());
outputStream.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer response = new StringBuffer();
int result;
while ((result = in.read()) != -1) {
response.append(Character.toChars(result));
System.out.println(result);
}
System.out.println("Done!"); //never gets printed
} catch (...) {}
Приведенный выше код успешно считывает все данные из потока, но затем зависает. Читая в сети, я ожидал получить -1 с сервера (который я не могу контролировать), чтобы указать, что я достиг конца потока, но вместо этого получаю следующее:
(Lots of data above this point)
57
10
37
37
69
79
70
10
Затем он зависает. Итак, мои вопросы:
1) Я закодировал это неправильно или есть проблема с ответом сервера?
2) Если есть проблема с ответом сервера (т.е. нет -1), как я могу обойти это (то есть прекратить чтение, когда он зависает).
Любая помощь оценивается!