Menentukan Penutupan Sambungan dengan Java Socket API
Apabila bekerja dengan API soket Java, ia boleh menjadi mencabar untuk mengesan apabila sambungan telah terputus . Tidak seperti kaedah seperti isConnected() dan isClosed(), yang hanya menunjukkan keadaan soket setempat, tiada API terbina dalam untuk menentukan status soket jauh.
Untuk menangani had ini, pendekatan yang disyorkan melibatkan pemantauan Operasi I/O. Jika read() mengembalikan -1, readLine() mengembalikan null atau readXXX() membuang EOFException, kemungkinan rakan sebaya telah menutup sambungan dengan baik.
Dalam kes sambungan telah ditamatkan secara tiba-tiba, cuba untuk write boleh mengakibatkan IOException, menunjukkan "set semula sambungan oleh rakan sebaya." Operasi membaca juga mungkin gagal dengan pengecualian yang serupa.
Sebagai alternatif, tamat masa baca boleh digunakan untuk mengesan apabila rakan setara kekal bersambung tetapi tidak aktif.
Perlu ambil perhatian bahawa ClosedChannelException dan SocketException: soket ditutup tidak menandakan sambungan tertutup sebaliknya cubaan untuk menggunakan saluran selepas ia ditutup secara setempat.
Dalam senario tertentu dengan Java 7 pada Windows XP, memantau kesahihan SelectionKey boleh mendedahkan tetapan semula sambungan. Walau bagaimanapun, tingkah laku ini tidak dijamin merentas platform atau versi JRE yang berbeza.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Penutupan Soket Jauh di Java dengan Amanah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!