Android HttpURLConnection lançant EOFException
Ici est la question de la manière la plus simple.
- Je créer une connexion HTTPS pour mon serveur proxy à l'aide de HttpUrlConnection Objet.
Mon proxy ferme la connexion, mais mon code encore essaie de réutiliser la même connexion. Et si je reçois EOFException.
Comment puis-je gérer de tels cas?
source d'informationauteur Sudarshan Bhat | 2012-09-07
Vous devez vous connecter pour publier un commentaire.
Je vous recommande de désactiver le protocole http.keepalive système de la propriété. La section des performances de la la documentation indique que les connexions socket seront réutilisés lorsque cela est possible. On dirait qu'elle est en train d'essayer de réutiliser la connexion, mais le proxy a déjà fermé. Sur ce postDarrell indique également que la modification du système de la propriété résolu son problème.
S'avère qu'ils ont résolu ce problème en Android sur 8 janvier [1]. Le correctif essentiellement les marques de l'ancienne connexion que recyclés et, en interne, de nouvelles tentatives de la demande.
Pour corriger cela pour l'instant, je suggère de réessayer demande si un EOFException est rencontré avec un nombre limite de tentatives pour empêcher stackoverlows.
J'ai eu ce problème avec la normale connexions HTTP. La première demande est OK, le second a échoué avec un EOFException.
Eventuelly je l'ai corrigé en supprimant...
...à partir de la HttpUrlConnection.
Je pouvais être que le serveur je suis d'appel ne peut pas gérer chuncked de données. Ne sais pas.
Si vous ne souhaitez pas réutiliser la connexion puis relâchez-la.
Vous pouvez utiliser cette méthode pour choisir les données à partir du serveur, puis de convertir les entrées de la garniture de chaîne vous pouvez ensuite analyser pour une utilisation ultérieure.`
Peut-être
httpClient
"a plus de bugs" et est obsolète, mais ce problème avec JellyBean est un écueil. Je suis à l'aide de Ksoap2 j'ai donc essayé toutes les suggestions de réponses que j'ai pu.System.setProperty("http.keepAlive", "false");
httpTransportSE.getServiceConnection().setRequestProperty("Connection", "close");
httpTransportSE.getServiceConnection().disconnect();
Rien n'a fonctionné - ma solution a été de restauration de la version de Ksoap2 je suis à l'aide d'3.1.1 à 2.6.5. À l'aide de 2.6.5 le problème est sensiblement réduit. Encore en test, mais peut-être encore résolu.
J'ai trouvé que la nouvelle tentative de la connexion résout le problème comme on le voit ici: https://stackoverflow.com/a/20302767/2520390
Assurez-vous de fermer la connexion avant de votre appel récursif.
Aussi, j'ai ajouté ce qui suit à la connexion à fermer la connexion, même si je ne suis pas sûr que cela aide:
Vous ne devriez pas essayer de réutiliser le même HttpURLConnection instance. Le docs dans le très bas de ligne de la "Présentation de la Classe" dire
Les connexions persistantes de travail à un niveau différent, voir le débrancher docs:
http://developer.android.com/reference/java/net/HttpURLConnection.html#disconnect()
Donc, vous devriez toujours utiliser une nouvelle HttpURLConnection et de laisser la prise de piscine de poignée de ré-utilisation.
Il y avait apparemment des bugs avec les connexions persistantes pré-Froyo (2.2), il est donc recommandé de désactiver keep-alive sur ces vieux appareils.
Dans mon cas, le EOFException a été causé par mon serveur qui n'est pas de l'envoi d'une réponse complète, voir les détails ici: https://stackoverflow.com/a/27845172/2335025
Vous ne devriez pas essayer de réutiliser le même HttpURLConnection instance. Le docs dans le très bas de ligne de la "Présentation de la Classe" dire
Les connexions persistantes de travail à un niveau différent, voir le débrancher docs:
http://developer.android.com/reference/java/net/HttpURLConnection.html#disconnect()
Donc, vous devriez toujours utiliser une nouvelle HttpURLConnection et de laisser la prise de piscine de poignée de ré-utilisation. Il y a peut-être des questions si il essaie de réutiliser un support qui a été fermée par le serveur, les réponses à cette question: Android HttpUrlConnection EOFException
Il y avait apparemment des bugs avec les connexions persistantes pré-Froyo (2.2), il est donc recommandé de désactiver keep-alive sur ces vieux appareils.
Dans mon cas, le EOFException a été causé par mon serveur qui n'est pas de l'envoi d'une réponse complète, voir les détails ici: https://stackoverflow.com/a/27845939/2335025
Essayer ce code:`
Httppost méthode:
`
pour convertir les flux de la chaîne:`