Officiel des raisons pour “Logiciel a provoqué l'abandon de la connexion: prise d'erreur d'écriture”
Compte tenu de cette trace de la pile d'extrait de
Causés par: java.net.Exception socketexception:
Logiciel a provoqué l'abandon de la connexion:
prise d'erreur d'écriture
à
java.net.SocketOutputStream.socketWrite0(Native
La méthode)
J'ai essayé de répondre aux questions suivantes:
- Ce code est de lancer cette exception? (JVM?/Tomcat?/Mon code?)
- Quelles sont les causes de cette exception?
Sujet n ° 1:
De Sun JVM source ne contient pas de ce message exact, mais je pense que le texte Logiciel a provoqué l'abandon de la connexion: prise d'erreur d'écriture est à partir de l'implémentation native de SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Sujet #2
Ma conjecture est qu'il est causé lorsque le client a mis fin à la connexion, avant d'obtenir la réponse complète (par exemple envoyé une demande, mais avant d'obtenir la réponse complète, il est fermé /terminé /hors ligne)
Questions:
- Sont les hypothèses énoncées ci-dessus correcte (#1 et #2)?
- Cela peut-il être diffrentiated de la situation: "impossible d'écrire dans le client, en raison d'une erreur de réseau sur le serveur côté"? ou serait-ce de rendre le même message d'erreur?
- Et le plus important: Est-il un document officiel (e.g du Soleil), en indiquant ci-dessus?
J'ai besoin d'avoir une preuve que cette trace de la pile est la socket du client "faute", et il n'y a rien que le serveur pourrait avez fait pour l'éviter. (à l'exception de la capture de l'exception, ou à l'aide d'un non JVM de Sun SocketOutputStream, bien que les deux n'ont pas vraiment d'éviter le fait que le client a résilié)
Hey Eran je reçois également cette exception lors de l'envoi/de l'écriture (
outs.write(audioBytes);
) byte[]
à OutputStream
. Lorsque l'audio est en sillonnant et lors de la lecture si l'utilisateur clique sur un autre menu (qui envoient une demande de serveur) j'ai eu le même message d'erreur sur la console. donc, il est sûr d'ignorer cette exception?Il semble, oui. L'essentiel de ce que les réponses décrire, c'est un Windows d'erreur spécifique, mais je suppose que sur Linux, vous obtiendrez la même exception, avec juste un libellé différent... (Mes termes profanes de comprendre fondamentalement, c'est que cela est causé lorsque vous envoyez via un socket à une certaine distance l'emplacement X et X s'est déconnecté au milieu, mais je suis sûr que ce n'est pas la façon la plus précise pour la décrire)
Pour moi ce qui s'est passé lorsque la base de données du serveur a été redémarré et l'application est encore en train de requête à l'aide de connexions déjà ouvertes. Je ne sais pas pourquoi elles n'ont pas été actualisés comme nous sommes à l'aide de DBCP en fonction de la mutualisation. Mais le redémarrage de la demande fixe le problème.
OriginalL'auteur Eran Medan | 2010-01-24
Vous devez vous connecter pour publier un commentaire.
Voir cet article MSDN. Voir aussi Quelques informations au sujet de Logiciel causé l'abandon de la connexion'.
Cet article ne fait que répéter la confusion, et ajoute certains de ses propres. WSAECONNABORTED est un code d'erreur Winsock, donc il ne peut pas être un de Berkeley d'explication. La situation décrite sur le serveur HTTP produirait ECONNRESET, pas WSAECONNABORTED.
Je reçois également cette exception lors de l'envoi/de l'écriture (les aboutissants.écrire(audioBytes);) byte[] pour OutputStream. Lorsque l'audio est en sillonnant et lors de la lecture si l'utilisateur clique sur un autre menu (qui envoient une demande de serveur) j'ai eu le même message d'erreur sur la console. donc, il est sûr d'ignorer cette exception?
Tous les trois sources citées ici l'état dont elle est produite par ACK échecs. Si vous avez une source pour votre demande veuillez citer.
Ce n'est pas une vraie réponse car elle ne permet pas de vous donner des informations pour poursuivre la résolution du problème. La réponse ici est en fait "quelque chose de mauvais s'est passé sur le réseau". Il serait très utile de comprendre ce que les autres journaux et d'autres enregistrements de l'activité pourrait me permettre d'identifier le problème sous-jacent.
OriginalL'auteur user207421
Je l'ai vu le plus souvent lorsqu'un pare-feu d'entreprise sur un poste de travail/ordinateur portable est dans la manière, il tue la connexion.
par exemple. J'ai un serveur et un client processus sur la même machine. Le serveur est à l'écoute sur toutes les interfaces (0.0.0.0) et le client tente d'établir une connexion pour le public, la maison de l'interface (note n'est pas de l'interface de bouclage 127.0.0.1).
Si la machine est a son réseau déconnecté (par exemple wifi désactivé), puis la connexion est formé. Si la machine est connectée au réseau de l'entreprise (directement ou vpn), alors la connexion est formée.
Toutefois, si l'ordinateur est connecté à un réseau wifi public (ou de votre réseau domestique), puis le pare-feu de coups de pied dans un tue la connexion. Dans cette situation, la connexion du client à l'interface de bouclage fonctionne très bien, juste pas à la maison/public interface.
Espère que cette aide.
OriginalL'auteur user2028913
La
java.net.Exception socketexception
est jeté quand il ya une erreur lors de la création ou de l'accès à un socket (comme TCP). Généralement, ceci peut être causé lorsque le serveur a mis fin à la connexion (sans fermer correctement), donc avant d'obtenir la réponse complète. Dans la plupart des cas, cela peut être causé soit par le problème de délai d'attente (par exemple, la réponse prend trop de temps ou le serveur est surchargé de demandes), ou le client a envoyé le SYN, mais il n'a pas d'accusé de réception (accusé de réception de la fin de connexion). Pour les problèmes de délai d'attente, vous pouvez envisager d'augmenter la valeur de délai d'expiration.L'Exception Socket vient habituellement avec le détail de message sur la question.
Exemple détaillé de messages:
L'erreur indique une tentative d'envoi du message et la connexion a été interrompue par votre serveur. Si ce qui s'est passé lors de la connexion à la base de données, cela peut être lié à l'utilisation de pas compatible Connector/J pilote JDBC.
Solution Possible: assurez-vous que vous avez la bonne bibliothèques de pilotes dans votre CLASSPATH.
Cela peut se produire lorsqu'il y a un problème pour se connecter à la télécommande. Par exemple due au virus checker rejetant les demandes de courrier à distance.
Solution Possible: Vérifiez le Virus de numérisation service, que ce soit en bloquant le port pour les demandes sortantes pour les connexions.
Solution Possible: assurez-vous que vous êtes en train de rédiger la bonne longueur d'octets dans le flux. Alors vérifiez ce que vous envoyez. Voir ce fil.
L'application ne vérifie pas si keep-alive connexion avait été suspendu sur le côté serveur.
Solution Possible: vérifiez que le HttpClient est pas null avant de commencer la lecture à partir de la connexion.E13222_01
La connexion a été interrompue par les pairs (serveur).
La connexion a été résilié par le client ou fermée par le serveur à la fin de la connexion en raison de la demande à la demande.
Voir: Quelle est la cause de mon java.net.Exception socketexception: Connection reset?
HttpClient
êtrenull
ne peut pas causer unSocketException
. N'écrivez pas de la bonne longueur pour le stream ne sont pas non plus.OriginalL'auteur kenorb
De prouver quel composant tombe en panne je voudrais surveiller la communication TCP/IP à l'aide de wireshark et regardez qui est actaully de la fermeture du port, également les délais d'attente peuvent être pertinents.
J'ai vu cela se produire lorsque le est surchargé et à court de mémoire. Je ne suis pas sûr que c'est l'OS qui ferme la connexion, mais JVM va sauvage.
Il y a une différence entre la fermeture d'un port, qui est visible comme une FIN en Wireshark, et l'abandon de la connexion, ce qui ne l'est pas.
OriginalL'auteur stacker
Avez-vous vérifié le Tomcat code source et la JVM source ? Qui peut vous donner plus d'aide.
Je pense que votre pensée générale est bonne. Je m'attends à une
ConnectException
dans le scénario que vous ne pouvez pas vous connecter. Le ci-dessus a l'air très comme il est axé sur les clients.Non, il n'a pas vérifié la source Tomcat ET la JVM source.
Ou s'il a coché la JVM source, il n'a pas vérifié tous.
la chaîne de message n'est plus probable dans les sources natives. Mais vous devriez également vérifier le journal des événements. OMI, cette dernière est susceptible d'être plus informatif.
Cette chaîne de message vient du système d'exploitation réellement.
OriginalL'auteur Brian Agnew
Pour toute personne utilisant simple de Serveur de Client de programmes et d'obtenir cette erreur, c'est un problème de ouverte (ou fermée au début) d'Entrée ou de Sortie des Flux.
OriginalL'auteur PRO_gramista
J'ai été confronté au même problème.
Souvent Ce type d'erreur se produit en raison de client a fermé sa connexion et le serveur encore en train d'écrire sur ce client.
Donc, assurez-vous que votre client a sa connexion ouverte jusqu'à ce que le serveur fait avec son outputstream.
Et encore une chose, N'oublie pas de fermer l'entrée et la sortie de flux.
Espère que cette aide.
Et si encore confrontés à la question que brièvement votre problème ici dans les détails.
OriginalL'auteur Nirav Chhatrola
Cette erreur m'est arrivé de tester mon service soap avec SoapUI client, en gros j'ai essayé d'obtenir un très grand message (>500ko) et SoapUI fermeture de la connexion par timeout.
...et mettre une grande valeur, tels que les 180000 (3 minutes), ce ne sera pas l'idéal pour fixer votre problème parce que le fichier est en fait pour les grands, mais au moins vous aurez une réponse.
OriginalL'auteur Marco
Fermé la connexion à un autre client
Dans mon cas, l'erreur était:
Il a été reçu dans eclipse lors du débogage d'une application java d'accéder à un H2 de la base de données. La source de l'erreur était que je l'avais d'abord ouvert la base de données avec l'Écureuil de vérifier manuellement pour l'intégrité. J'ai utilisé le drapeau pour activer les connexions multiples à la même DB (c'est à dire
AUTO_SERVER=TRUE
), donc il n'y a pas de problème de connexion à la DB à partir de java.L'apparition de l'erreur lorsque, après un certain temps --c'est un long processus java, j'ai décidé de fermer Écureuil pour libérer des ressources. Il semble que l'Écureuil était celui de "posséder" le DB d'instance de serveur et qu'il a été arrêté avec l'Écureuil de connexion.
Le redémarrage de l'application Java n'a pas produit l'erreur à nouveau.
config
OriginalL'auteur manuelvigarcia
Mon serveur a été lancer cette exception dans le pass 2 jours et je l'ai résolu en déplaçant la déconnexion de la fonction:
À la fin de la liste thread.
si il sera aidé quelqu'un.
OriginalL'auteur Sefi Erlich
Dans la situation expliquée ci-dessous, côté client va lever une exception:
Le serveur est invité à s'authentifier le certificat client, mais le client fournit un certificat qui a Étendu l'Utilisation de la Clé ne prend pas en charge l'authentification des clients, de sorte que le serveur n'accepte pas le certificat du client, puis il ferme la connexion.
en fait c'jeter exception socketexception tout comme la question en cours , j'avais testé
OriginalL'auteur xiaoming
ssl côté client va lancer une telle exception en dessous de situation(j'avais testé), :
serveur est invité à s'authentifier le certificat client, mais le client fournir un certificat qui a Étendu l'Utilisation de la Clé donot support de l'authentification des clients.
OriginalL'auteur xiaoming
J'ai été confrontée au même problème avec wireMock tout en se moquant de l'API rest d'appels.
Plus tôt, j'ai été de définir le serveur comme ceci:
Mais elle devrait être définie comme indiqué ci-dessous:
NullPointerException
, pas ce problème.OriginalL'auteur Yallaling Goudar