2012-10-02 45 views

Trả lời

8

Để đặt mọi thứ đơn giản, Socketmở là một ổ cắm đang chờ kết nối hoặc đã kết nối thành công với một số Socket khác. Khi một ổ cắm đã được đóng, điều đó có nghĩa là ổ cắm này không còn có sẵn để kết nối và rằng tài nguyên của nó đã được phát hành. A Socket được kết nối, tốt, có nghĩa là ổ cắm được kết nối với một ổ cắm khác Socket.

Vì vậy, một lon Socket ..

  • cởi mở và kết nối cùng một lúc.
  • mở và không được kết nối cùng một lúc.
  • không được kết nối khi đóng.

CẬP NHẬT

từ @Bryan

Rõ ràng, có khép hờ hoặc half-open bang cho TCP Sockets; sử dụng nào (hôm nay) khác với ý nghĩa ban đầu của nó. Thêm thông tin về số này link.

+2

+1 cho sự đơn giản nhưng rõ ràng –

+1

Không làm lẫn lộn mọi thứ, nhưng TCP cũng có trạng thái nửa đóng khi vẫn còn kết nối nhưng giờ đây là một chiều. –

7

Trang này cung cấp tổng quan khá tốt về trạng thái ổ cắm: http://diranieh.com/SOCKETS/SocketStates.htm và sự khác biệt giữa ổ cắm TCP và UDP. Cụ thể:

  • Trạng thái "Mở" (TCP và UDP): Ổ cắm chưa đặt tên đã được tạo. Một ổ cắm chưa đặt tên là ổ cắm không bị ràng buộc vào địa chỉ cục bộ và cổng
  • Trạng thái "Đã kết nối" (chỉ TCP): Một liên kết (mạch ảo) đã được thiết lập giữa máy chủ cục bộ và từ xa. Gửi và nhận dữ liệu hiện có thể.

Lưu ý rằng các triển khai mới hơn của java.net.DatagramSocket hỗ trợ phần mở rộng cho trạng thái mạng TCP/IP: Một DatagramSocket cũng có thể ở trạng thái "được kết nối", vì vậy isConnected() không nhất thiết trả về false mặc dù một ổ cắm datagram không bao giờ được "kết nối" ở lớp mạng. Cụ thể: "Khi một DatagramSocket được kết nối với một địa chỉ từ xa, các gói chỉ có thể được gửi đến hoặc nhận được từ địa chỉ đó. Theo mặc định, một ổ cắm datagram không được kết nối."

Để biết thêm thông tin, hãy xem sourcesJavaDoc.

Các vấn đề liên quan