java.صافي.SocketException:الخاص إحباط:recv فشل [مكررة]

StackOverflow https://stackoverflow.com/questions/135919

  •  02-07-2019
  •  | 
  •  

سؤال

هذا السؤال سبق الجواب هنا:

لم أكن قادرة على العثور على إجابة وافية على ما هو بالضبط الخطأ التالية يعني:

java.net.SocketException: Software caused connection abort: recv failed

ملاحظات:

  • هذا الخطأ هو نادر لا يمكن التنبؤ بها;على الرغم من أن الحصول على هذا الخطأ يعني أن جميع طلبات محددات سوف تفشل أيضا.
  • الحل الوحيد الذي يعمل (أيضا فقط في بعض الأحيان) هو تمهيد هر و/أو الفعلية الجهاز (ويندوز في هذه الحالة).
  • URI هو بالتأكيد المتاحة (كما أكد طريق طرح المتصفح للقيام الجلب).

كود ذات الصلة:

BufferedReader reader;
try { 
 URL url = new URL(URI);
 reader = new BufferedReader(new InputStreamReader(url.openStream())));
} catch( MalformedURLException e ) { 
 throw new IOException("Expecting a well-formed URL: " + e); 
}//end try: Have a stream

String buffer;
StringBuilder result = new StringBuilder();
while( null != (buffer = reader.readLine()) ) { 
 result.append(buffer); 
}//end while: Got the contents.
reader.close();
هل كانت مفيدة؟

المحلول

وهذا يعني عادة أن كان هناك خطأ في الشبكة مثل TCP المهلة.وأود أن تبدأ من خلال وضع الشم (يريشارك) على اتصال لمعرفة ما إذا كنت يمكن أن نرى أي مشاكل.إذا كان هناك TCP خطأ, يجب أن تكون قادرا على رؤية ذلك.كما يمكنك أيضا التحقق من جهاز التوجيه الخاص بك سجلات, إذا كان هذا هو المعمول به.إذا اللاسلكية تشارك في أي مكان ، وهذا هو مصدر آخر لهذا النوع من الأخطاء.

نصائح أخرى

هذا يحدث أيضا إذا كان العميل TLS هو غير قادر على أن تكون مصادقة من قبل الملقم تكوين تتطلب مصادقة العميل.

يحدث هذا الخطأ عندما يتم إغلاق الاتصال فجأة (عند اتصال TCP إعادة تعيين في حين لا يزال هناك بيانات في إرسال المخزن المؤقت).الشرط هي مشابهة جدا أكثر شيوعا 'إعادة تعيين الاتصال عن طريق الأقران'.يمكن أن يحدث بشكل متقطع عند الاتصال عبر الإنترنت ، ولكن أيضا بشكل منتظم إذا كان التوقيت الصحيح (على سبيل المثالمع المحافظة على الحياة الاتصالات على localhost).

عميل HTTP أن مجرد إعادة فتح الاتصال و إعادة المحاولة الطلب.من المهم أن نفهم أنه عندما اتصال في هذه الحالة ، ليس هناك طريقة للخروج من ذلك بخلاف لإغلاقه.أي محاولة إرسال أو تلقي سوف تنتج نفس الخطأ.

لا تستخدم URL.open(), استخدام Apache-المشاع HttpClient والتي لديها المحاولة آلية, تجمع الاتصال, المحافظة على الحياة والعديد من الميزات الأخرى.

نموذج الاستخدام:

HttpClient httpClient = HttpClients.custom()
            .setConnectionTimeToLive(20, TimeUnit.SECONDS)
            .setMaxConnTotal(400).setMaxConnPerRoute(400)
            .setDefaultRequestConfig(RequestConfig.custom()
                    .setSocketTimeout(30000).setConnectTimeout(5000).build())
            .setRetryHandler(new DefaultHttpRequestRetryHandler(5, true))
            .build();
// the httpClient should be re-used because it is pooled and thread-safe.

HttpGet request = new HttpGet(uri);
HttpResponse response = httpClient.execute(request);
reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
// handle response ...

هل http الوصول إلى البيانات ؟ يمكنك استخدام HttpClient المكتبة بدلا من معيار المكتبة ؟ المكتبة لديها المزيد من الخيارات و سوف نقدم أفضل رسائل الخطأ.

http://hc.apache.org/httpclient-3.x/

المرة الوحيدة التي رأيت شيئا مثل هذا يحدث عندما يكون لدي علاقة سيئة ، أو عند شخص ما هو إغلاق المقبس أن أنا أستخدم من مختلف سياق مؤشر الترابط.

حاول إضافة 'autoReconnect=true' إلى سلسلة الاتصال jdbc

هذا لن يحدث من وقت لآخر إما عند اتصال مرات أو عندما مضيف بعيد إنهاء علاقتهم (إغلاق التطبيق ، إيقاف تشغيل الكمبيوتر ، الخ).يمكنك تجنب هذا عن طريق إدارة مآخذ نفسك و التعامل مع الارتباطات في التطبيق الخاص بك عن طريق بروتوكول الاتصالات ثم يدعو shutdownInput و shutdownOutput لتوضيح الدورة.

انظر إذا كان لديك خدمة أخرى أو برنامج يعمل على منفذ http.هذا ما حدث معي عندما حاولت استخدام الميناء هو أخذ من قبل برنامج آخر.

أنا أيضا عانيت من هذه المشكلة.الحل كان:

sc.setSoLinger(true, 10);

نسخة من موقع ويب -->باستخدام setSoLinger() الطريقة صراحة تأخير قبل إعادة إرسال ، وإعطاء المزيد من الوقت للحصول على البيانات قراءة أو إرسال.

ربما ليس هو الحل الجميع ولكن بعض الناس.

إذا كنت تستخدم Netbeans لإدارة هر ، في محاولة لتعطيل HTTP مراقبة في أدوات خوادم

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top