Я пытаюсь написать простой код сокета, который имеет следующую основную форму -гнездо закрывается путем попытки с ресурсами
try(BufferedReader request = new BufferedReader(new InputStreamReader(sock.getInputStream()))){
//Do some work...
}
//BufferedReader gets closed, but also makes the socket close
...
...
response.write(blah);//Causes exception because socket is closed
Моя проблема заключается в том, что сокет закрывается, но я не думаю, должен быть. Ресурс try-with создает BufferedReader, а затем автоматически закрывает его, когда я покидаю блок try, но по какой-то причине он также закрывает весь сокет! Поэтому, когда я получаю код ответа, который позже использует тот же сокет, я получаю исключение. Есть ли способ исправить это? Или мне просто не нужно использовать try-with-resources (который был бы менее идеальным)?
Вы случайно не знаете, какие потоки не распространяют close()? –
Отсутствует в среде Java. Вам нужно будет написать свой собственный –
«BufferedReader.close() закрывает поток поддержки» ... и закрытие либо входного, либо выходного потока сокета закрывает другой поток и сам сокет. – EJP