Tôi thấy câu trả lời khác vừa được đăng, nhưng tôi nghĩ rằng bạn đang tương tác với khách hàng chơi trò chơi của mình, vì vậy tôi có thể đặt ra một cách tiếp cận khác (trong khi BufferedReader chắc chắn có hiệu lực trong một số trường hợp).
Nếu bạn muốn ... bạn có thể ủy thác trách nhiệm "đăng ký" cho máy khách. Tức là bạn sẽ có một tập hợp những người dùng được kết nối với dấu thời gian trên tin nhắn cuối cùng nhận được từ mỗi ... nếu khách hàng hết thời gian chờ, bạn sẽ buộc đăng ký lại khách hàng, nhưng điều đó dẫn đến báo giá và ý tưởng bên dưới.
Tôi đã đọc điều đó để thực sự xác định xem liệu một ổ cắm đã được đóng hay chưa, dữ liệu phải được ghi vào luồng đầu ra và phải bắt một ngoại lệ. Đây có vẻ như là một cách thực sự không sạch để xử lý tình huống này.
Nếu mã Java của bạn không đóng / ngắt kết nối Socket, thì làm thế nào khác bạn sẽ được thông báo rằng máy chủ từ xa đã đóng kết nối của bạn? Cuối cùng, thử / bắt của bạn gần giống như điều mà một người thăm dò ý kiến đang lắng nghe các sự kiện trên ổ cắm ACTUAL sẽ làm. Hãy xem xét những điều sau:
- hệ thống cục bộ của bạn có thể đóng ổ cắm của bạn mà không cần thông báo cho bạn ... đó chỉ là việc triển khai Socket (tức là nó không thăm dò phần cứng / trình điều khiển / phần sụn / bất cứ điều gì để thay đổi trạng thái).
- Socket mới (Proxy p) ... có nhiều bên (thực sự là 6 điểm cuối) có thể đóng kết nối với bạn ...
Tôi nghĩ một trong những đặc điểm của ngôn ngữ trừu tượng là bạn được trừu tượng hóa từ những điều vụn vặt. Hãy nghĩ đến việc sử dụng từ khóa trong C # (thử / cuối cùng) cho SqlConnection hoặc bất cứ thứ gì ... đó chỉ là chi phí kinh doanh ... Tôi nghĩ rằng thử / bắt / cuối cùng là mẫu được chấp nhận và cần thiết cho việc sử dụng Socket.