هل قمت بتكوين مقبس Java بحيث يفشل بسرعة عند قطع الاتصال؟

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

سؤال

لدي منفذ استماع على الخادم الخاص بي وأتصل به باستخدام فئة Java و Socket واجهة، أي.

Socket mySocket = new Socket(host,port);

ثم أمسك OutputStream, ، تزيين ب PrintWriter في وضع التدفق التلقائي وأنا أضحك - إلا إذا تم إغلاق منفذ الاستماع.ثم أحصل

tcp4       0      0  *.9999                 *.*                    LISTEN
tcp        0      0  127.0.0.1.45737        127.0.0.1.9999         CLOSE_WAIT

ويبدو أنني لا أستطيع اكتشاف المشكلة في البرنامج - لقد حاولت استخدام isConnected() الطريقة على المقبس ولكن لا يبدو أن الاتصال مغلق.

أريد أن أكون على دراية بالمشكلة في المرة القادمة التي أحاول فيها الكتابة إلى المقبس حتى أتمكن من محاولة إعادة الاتصال والإبلاغ عن المشكلة.

أي نصيحة من فضلك؟

شكرا لكم جميعا

هل كانت مفيدة؟

المحلول

تعيين مهلة قصيرة؟

يفعل isOutputShutdown() لا تحصل على ما تريد؟

يمكنك دائمًا بناء ملف SocketWatcher الطبقة التي تدور في حد ذاتها Thread ويحاول بشكل متكرر كتابة سلاسل فارغة إلى ملف Socket حتى يرفع ذلك أ SocketClosedException.

نصائح أخرى

الطريقة الوحيدة الموثوقة لاكتشاف الاتصال المقطوع في TCP هي الكتابة إليه، مما سيؤدي في النهاية إلى "إعادة تعيين الاتصال" IOException.ومع ذلك، نظرًا للتخزين المؤقت، لن يحدث ذلك عند الكتابة الأولى بعد قطع الاتصال، ولكن عند الكتابة اللاحقة.لا يمكنك فعل أي شيء حيال ذلك.

قم بتعيين موضوع مختلف للقراءة من المقبس.سيتم حظره حتى يتم إغلاق المقبس، ثم سيتم طرح استثناء.قبض على هذا الاستثناء لاكتشاف الإغلاق على الفور.

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