La classe Java Socket
ha due metodi isClosed
e isConnected
per verificare se la presa è chiusa o collegata rispettivamente. Volevo sapere qual è la differenza tra un socket TCP che è solo aperto e un socket TCP che è aperto e connesso, e in che modo è diverso da UDP.Qual è la differenza tra una presa aperta e una presa collegata?
risposta
per mettere le cose semplicemente, un Socket
che è aperta è una presa che è o in attesa di connessione o è collegata con successo con un altro Socket
. Quando una presa è stata chiusa, significa che questo socket non è più disponibile per la connessione e che le sue risorse sono già state rilasciate. Un Socket
collegato, beh, significa che il socket è collegato a un altro Socket
.
Quindi un Socket
lattina ..
- essere aperto e connesso allo stesso tempo.
- essere aperto e non connesso allo stesso tempo.
- non collegato quando chiuso.
UPDATE
da @Bryan
pare, ci sono semichiusi o semiaperte stati per Socket TCP; quale uso (oggi) è diverso dal suo significato originale. Maggiori informazioni su questo link.
Questa pagina offre una buona panoramica degli stati dei socket: http://diranieh.com/SOCKETS/SocketStates.htm e la differenza tra i socket TCP e UDP. In particolare:
- Stato "Aperto" (TCP e UDP): è stato creato un socket senza nome. Un socket senza nome è uno che non è associato a un indirizzo e porta locale.
- Stato "Connesso" (solo TCP): è stata stabilita un'associazione (circuito virtuale) tra un host locale e remoto. L'invio e la ricezione di dati sono ora possibili.
Si noti che più recenti implementazioni di java.net.DatagramSocket sostegno dell'estensione agli stati di rete TCP/IP: A DatagramSocket può anche essere in stato di "connesso", in modo che isConnected() non deve necessariamente restituire false anche sebbene un socket di datagramma non sia mai "connesso" al livello di rete. In particolare: "Quando un DatagramSocket è connesso a un indirizzo remoto, i pacchetti possono essere inviati o ricevuti solo da quell'indirizzo.Per impostazione predefinita un socket del datagramma non è connesso."
+1 per la semplicità e la chiarezza –
Non confondere le cose, ma TCP ha anche uno stato semichiuso dove c'è ancora una connessione ma ora è unidirezionale. –