Dato questo frammento di traccia dello stack
Causato da: java.net.SocketException: il software ha causato l'interruzione della connessione: errore di scrittura del socket
su java.net.SocketOutputStream.socketWrite0 (metodo nativo)
Ho provato a rispondere alle seguenti domande:
- Quale codice genera questa eccezione? (JVM? / Tomcat? / Il mio codice?)
- Cosa provoca questa eccezione?
Per quanto riguarda il n. 1:
La fonte JVM di Sun non contiene questo messaggio esatto, ma penso che il testo Software abbia causato l'interruzione della connessione: l'errore di scrittura del socket proviene dall'implementazione nativa di SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Per quanto riguarda il n. 2
La mia ipotesi è che sia causato quando il client ha terminato la connessione, prima di ottenere la risposta completa (ad esempio, ha inviato una richiesta, ma prima di ottenere la risposta completa, è stato chiuso / terminato / offline)
Domande:
- I presupposti di cui sopra sono corretti (n. 1 e n. 2)?
- Questo può essere differenziato dalla situazione: "impossibile scrivere sul client, a causa di un errore di rete sul lato server "? o che renderebbe lo stesso messaggio di errore?
- E, cosa più importante: esiste un documento ufficiale (ad es. Di Sun) che afferma quanto sopra?
Ho bisogno di avere una prova che questa traccia dello stack è "colpa" del client socket e non c'è nulla che il server avrebbe potuto fare per evitarlo. (tranne per la cattura dell'eccezione o l'utilizzo di un SocketOutputStream non Sun JVM, sebbene entrambi non evitino realmente il fatto che il client sia terminato)
outs.write(audioBytes);
) byte[]
in OutputStream
. Quando l'audio è attivo e durante la riproduzione se l'utente fa clic su qualsiasi altro menu (che invia una richiesta del server), ho riscontrato lo stesso errore sulla console. quindi è sicuro ignorare questa eccezione?