2012-10-02 6 views

risposta

8

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.

+2

+1 per la semplicità e la chiarezza –

+1

Non confondere le cose, ma TCP ha anche uno stato semichiuso dove c'è ancora una connessione ma ora è unidirezionale. –

7

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."

Per ulteriori informazioni, vedere sources e JavaDoc.