Saya mengalami beberapa masalah dengan Java socket API. Saya mencoba menampilkan jumlah pemain yang saat ini terhubung ke game saya. Mudah untuk menentukan kapan seorang pemain telah terhubung. Namun, tampaknya sulit untuk menentukan kapan seorang pemain telah memutus sambungan menggunakan API soket.
Memanggil isConnected()
pada soket yang telah dicabut dari jarak jauh sepertinya selalu kembali true
. Demikian pula, memanggil isClosed()
soket yang telah ditutup dari jarak jauh sepertinya selalu kembali false
. Saya telah membaca bahwa untuk benar-benar menentukan apakah soket telah ditutup atau tidak, data harus ditulis ke aliran keluaran dan pengecualian harus ditangkap. Ini sepertinya cara yang sangat tidak bersih untuk menangani situasi ini. Kami hanya harus terus-menerus mengirim pesan sampah melalui jaringan untuk mengetahui kapan soket telah ditutup.
Apakah ada solusi yang lain?