Java Socket API: Mengenalpasti Sambungan Tertutup
Menentukan status sambungan jauh boleh mencabar menggunakan API soket Java. Tidak seperti isConnected() dan isClosed(), yang hanya mencerminkan keadaan setempat soket, tidak mudah untuk memastikan sama ada sambungan telah diputuskan oleh pihak jauh.
Untuk menentukan status sambungan dengan tepat, anda mesti berinteraksi secara aktif dengan soket. Berikut ialah beberapa pendekatan:
-
Pertukaran Data: Percubaan untuk menulis data ke strim output dan menangkap pengecualian yang dilemparkannya boleh menunjukkan sambungan tertutup. Walau bagaimanapun, pendekatan ini sentiasa menghantar trafik yang tidak diperlukan dan tidak sesuai.
-
Menyekat Input/Output: Apabila sambungan ditutup dengan teratur, menyekat operasi, seperti readLine() atau read(), akan mengembalikan nilai yang boleh diramal (-1 atau null). Malangnya, kaedah ini mungkin tidak tepat pada masanya jika sambungan terputus secara tiba-tiba.
-
Tamat Masa Baca: Mengkonfigurasi tamat masa baca boleh membantu mengesan sambungan tidak aktif. Jika tamat masa tamat sebelum menerima data, sambungan mungkin terputus.
-
Kekunci Pemilihan Tidak Sah: Dalam Java 7 dan ke atas, menggunakan select() dengan OP_READ boleh mengesan sambungan tertutup apabila SelectionKey yang berkaitan menjadi tidak sah. Walau bagaimanapun, tingkah laku ini mungkin berbeza-beza bergantung pada platform dan versi JRE.
Ingat bahawa kaedah ini hanya akan mengesan sambungan tertutup dengan segera jika rakan sebaya jauh mengikut etika penutupan sambungan yang betul. Jika tidak, sambungan mungkin memasuki keadaan separuh tertutup, menjadikan pengesanan lebih sukar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Sambungan Jauh Tertutup Dengan Amanah Menggunakan API Soket Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!