Запись выходного потока сокета Java на стороне сервера блокируется навсегда, когда клиент закрывает соединение без чтения данных. Как с этим справиться?

#java #sockets #client-server #serversocket #socketexception

Вопрос:

У нас есть служба, которая принимает только один запрос на Java TCP/IP ServerSocket. Затем считывает запрос на обслуживание указанным способом в сокете, вызывает IBM WTX map при вводе сообщения и записывает ответ обратно клиенту.

Но, пробуя разные сценарии, мы попробовали один сценарий, в котором клиент подключается к серверу, успешно отправляет данные на сервер, но отключается перед чтением ответа с сервера. В то же время сокет, созданный при принятии соединения на стороне сервера, считывал данные, выполнял обработку и пытался записать в выходной поток сокета, используя метод записи. Но вызов на запись так и не вернулся. Для потока вывода нет такой вещи, как setSoTimeout. Как только мы получили исключение SocketException и ошибку сломанной трубы, но в дальнейшем попытались повторить тот же сценарий, мы так и не получили исключения, и как вызов записи, так и процесс зависли навсегда. Как мы можем справиться с этим?