Lớp Java Socket
có hai phương pháp isClosed
và isConnected
để kiểm tra xem ổ cắm có được đóng hoặc được kết nối tương ứng hay không. Tôi muốn biết sự khác biệt giữa một socket TCP mà chỉ mở và một socket TCP được mở và kết nối, và điều này khác với UDP như thế nào.Whats sự khác biệt giữa một ổ cắm được mở và một ổ cắm được kết nối là gì?
Trả lời
Để đặt mọi thứ đơn giản, Socket
là mở 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.
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."
- 1. Sự khác nhau giữa ống và ổ cắm là gì?
- 2. Sự khác nhau giữa ống và ổ cắm là gì?
- 3. Tách một ổ cắm riêng khỏi ổ cắm của Boost.ASIO
- 4. Ổ cắm Async là gì?
- 5. Ổ cắm miền PostgreSQL UNIX và ổ cắm TCP
- 6. Kết nối Ổ cắm TLS qua Nodejs
- 7. Ổ cắm có thể được đóng từ một sợi khác khi gửi/recv trên cùng một ổ cắm không?
- 8. Kết nối với ổ cắm trên Tomcat?
- 9. Nhiều kết nối trên cùng một ổ cắm cổng C++
- 10. Ổ cắm Python - giữ ổ cắm còn sống?
- 11. perl tắt máy một ổ cắm
- 12. Ổ cắm Java và các kết nối bị rơi
- 13. Việc đóng luồng đầu vào của ổ cắm cũng có đóng kết nối ổ cắm không?
- 14. Xác định giữa ổ cắm và fd
- 15. API ổ cắm NaCl là gì?
- 16. Socket.io, sự khác biệt giữa socket.set() và ổ cắm tài sản?
- 17. Sự khác nhau giữa kết nối đầu ra và kết nối hành động là gì?
- 18. Cách tạo ổ cắm Boost.Asio từ ổ cắm gốc?
- 19. Ổ cắm giữa các máy tính
- 20. AS3: Ổ cắm & HTTPS/SSL
- 21. Ổ cắm Python +
- 22. Lỗi ổ cắm - đôi khi?
- 23. Ổ cắm ActionScript 3.0 không thể kết nối lại
- 24. Đường ống giữa các ổ cắm
- 25. Ổ cắm Php và các luồng
- 26. Ổ cắm Android ngoại lệ "được đóng"
- 27. Quy tắc kết nối ổ cắm liên tục của Android
- 28. Kết nối ổ cắm đã bị hủy bỏ - CommunicationException
- 29. Ổ cắm ICMP (linux)
- 30. Lỗi kết nối ổ cắm web trên amazon ec2
+1 cho sự đơn giản nhưng rõ ràng –
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. –