Étant donné cet extrait de trace de pile
Provoqué par: java.net.SocketException: le logiciel a provoqué l'abandon de la connexion: erreur d'écriture de socket
sur java.net.SocketOutputStream.socketWrite0 (méthode native)
J'ai essayé de répondre aux questions suivantes:
- Quel code lève cette exception? (JVM? / Tomcat? / Mon code?)
- Qu'est-ce qui provoque la levée de cette exception?
Concernant le n ° 1:
La source JVM de Sun ne contient pas ce message exact, mais je pense que le texte Software a causé l'abandon de la connexion: l'erreur d'écriture de socket provient de l'implémentation native de SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Concernant # 2
Je suppose que cela est causé lorsque le client a mis fin à la connexion, avant d'obtenir la réponse complète (par exemple, a envoyé une demande, mais avant d'obtenir la réponse complète, elle a été fermée / terminée / hors ligne)
Des questions:
- Les hypothèses ci-dessus sont-elles correctes (n ° 1 et n ° 2)?
- Cela peut-il être différent de la situation: "impossible d'écrire sur le client en raison d'une erreur réseau côté serveur "? ou cela rendrait-il le même message d'erreur?
- Et le plus important: existe-t-il un document officiel (par exemple de Sun) indiquant ce qui précède?
J'ai besoin d'une preuve que cette trace de pile est la "faute" du client socket, et il n'y a rien que le serveur aurait pu faire pour l'éviter. (sauf pour attraper l'exception, ou en utilisant un SocketOutputStream non Sun JVM, bien que les deux n'évitent pas vraiment le fait que le client s'est arrêté)
outs.write(audioBytes);
) byte[]
à OutputStream
. Lorsque l'audio s'exécute et pendant la lecture si l'utilisateur clique sur un autre menu (qui envoie une requête au serveur), j'ai eu la même erreur sur la console. alors est-il prudent d'ignorer cette exception?