Учитывая этот фрагмент трассировки стека
Причина: java.net.SocketException: программное обеспечение вызвало прерывание соединения: ошибка записи сокета
в java.net.SocketOutputStream.socketWrite0 (собственный метод)
Я пытался ответить на следующие вопросы:
- Какой код выдает это исключение? (JVM? / Tomcat? / Мой код?)
- Что вызывает это исключение?
Относительно № 1:
Источник JVM от Sun не содержит этого точного сообщения, но я думаю, что текст Software вызвал прерывание соединения: ошибка записи в сокет произошла из собственной реализации SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Относительно № 2
Я предполагаю, что это вызвано тем, что клиент разорвал соединение до получения полного ответа (например, отправил запрос, но до получения полного ответа он был закрыт / прекращен / отключен)
Вопросы:
- Верны ли вышеизложенные предположения (№ 1 и № 2)?
- Можно ли это дифференцировать от ситуации: «не удалось написать клиенту из-за сетевой ошибки на стороне сервера »? или это выдает то же сообщение об ошибке?
- И самое главное: есть ли официальный документ (например, от Sun), в котором говорится выше?
Мне нужно иметь доказательство того, что эта трассировка стека является «ошибкой» клиента сокета, и сервер ничего не мог бы сделать, чтобы избежать этого. (кроме перехвата исключения или использования не Sun JVM SocketOutputStream, хотя оба не избегают того факта, что клиент завершил работу)
outs.write(audioBytes);
) byte[]
в OutputStream
. Когда звук воспроизводится и во время воспроизведения, если пользователь нажимает на любое другое меню (которое отправляет запрос на сервер), я получаю ту же ошибку на консоли. так безопасно ли игнорировать это исключение?