157 votes

java.net.SocketException : Réinitialisation de la connexion

J'obtiens l'erreur suivante en essayant de lire à partir d'un socket. Je fais un readInt() sur ce point InputStream et j'obtiens cette erreur. En parcourant la documentation, cela suggère que la partie client de la connexion a fermé la connexion. Dans ce scénario, je suis le serveur.

J'ai accès aux fichiers journaux du client et il ne ferme pas la connexion, et en fait ses fichiers journaux suggèrent que je ferme la connexion. Quelqu'un a-t-il une idée de la raison pour laquelle cela se produit ? Que faut-il vérifier d'autre ? Cela se produit-il lorsque des ressources locales atteignent des seuils ?


Je note cependant que j'ai la ligne suivante :

socket.setSoTimeout(10000);

juste avant le readInt() . Il y a une raison à cela (longue histoire), mais par curiosité, y a-t-il des circonstances dans lesquelles cela pourrait conduire à l'erreur indiquée ? J'ai le serveur en cours d'exécution dans mon IDE, et il se trouve que j'ai laissé mon IDE bloqué sur un point d'arrêt, et j'ai alors remarqué que les mêmes erreurs exactement ont commencé à apparaître dans mes propres journaux dans mon IDE.

Quoi qu'il en soit, je ne fais que le mentionner, en espérant qu'il ne s'agisse pas d'un hareng rouge :-(.

0voto

bmck Points 141

Dans mon expérience, je rencontre souvent les situations suivantes ;

  1. Si vous travaillez dans une entreprise, contactez l'équipe chargée du réseau et de la sécurité. Car dans les demandes faites aux services externes, il peut être nécessaire de donner l'autorisation pour le point final pertinent.

  2. Un autre problème est que le Le certificat SSL a peut-être expiré sur le serveur où s'exécute votre application.

0voto

Thiago Ferreira Points 76

J'ai vu ce problème. Dans mon cas, il y avait une erreur causée par la réutilisation du même objet ClientRequest dans une classe Java spécifique. Ce projet utilisait Jboss Resteasy .

  1. Initialement, une seule méthode utilisait/invoquait l'objet ClientRequest (placé comme variable globale dans la classe) pour effectuer une requête dans une URL spécifique.
  2. Après cela, une autre méthode a été créée pour obtenir des données avec une autre URL, en réutilisant toutefois le même objet ClientRequest.

La solution : dans la même classe a été créé un autre objet ClientRequest et exclusivement pour ne pas être réutilisé.

0voto

Djek-grif Points 230

Dans mon cas, il s'agissait d'un problème avec la version TSL. J'utilisais Retrofit avec le client OkHttp et après avoir mis à jour ALB du côté serveur, je devais supprimer ma configuration avec connectionSpecs :

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
        List<ConnectionSpec> connectionSpecs = new ArrayList<>();
        connectionSpecs.add(ConnectionSpec.COMPATIBLE_TLS);
  //      clientBuilder.connectionSpecs(connectionSpecs);

Essayez donc de supprimer ou d'ajouter cette configuration pour utiliser différentes configurations TSL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X