Я пытаюсь разобрать HTTP-запросы ради развлечения, но сейчас у меня застряло, потому что метод, который я использую, блокируется до тех пор, пока не будет получен ввод.
Код: Выделить всё
byte[] buffer = new byte[1024];
while (!request.isDone()) {
int n = input.read(buffer);
if (n == -1) {
break;
}
request.parseRequest(buffer, n);
}
return request;
Я пытаюсь прочитать данные в буфере и проанализировать запрос до тех пор, пока он не будет выполнен. У меня есть небольшой класс, который создает ServerSocket, куда я отправляю простой запрос Curl, например Curl -v
http://localhost:5000/hello. Когда мой буфер имеет гораздо меньший размер, например 8 байт, запрос читается частями и анализируется правильно. Но когда мой буфер намного больше и может прочитать весь запрос за один раз, анализируется только строка запроса. Затем приведенный выше цикл возвращается и блокируется на третьей строке, где его нужно прочитать. Но curl поддерживает соединение, и моя программа просто ожидает ввода, который так и не был отправлен. Есть ли жизнеспособное решение моей проблемы, кроме поиска неблокирующего сокета в Java?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... st-in-java