TCP è identificata da quattro numeri:
- cliente (o peer 1) IP
- del server (o peer 2) IP
- porta del client
- porta del server
Una connessione TCP tipica è aperta come segue:
- L'IP del client viene fornito dall'ISP o dal NAT del client.
- L'IP del server viene fornito dall'utente o cercato in un DNS.
- Il client sceglie una porta arbitrariamente dall'intervallo non assegnato (evitando i quadrupli duplicati)
- La porta del server viene fornita dal protocollo o esplicitamente.
La porta specificata nel ServerSocket è quella a cui i client si connettono. Non è altro che un numero di porta che il sistema operativo sa che appartiene alla tua applicazione e un oggetto che passa gli eventi dal sistema operativo alla tua applicazione.
Il metodo ServerSocket#accept
restituisce un Socket
. Un socket è un oggetto che racchiude una singola connessione TCP. Cioè l'IP del client, l'IP del server, la porta TCP del client e la porta TCP del server (e alcuni metodi per passare i dati associati)
Il primo pacchetto TCP che il client invia deve contenere contiene la porta del server che la tua app sia in ascolto, altrimenti il sistema operativo non saprebbe a quale applicazione appartiene la connessione.
Inoltre, non vi è alcun incentivo per passare la porta TCP del server a un altro numero.Non aiuta la macchina server O la macchina client, ha bisogno di un po 'di overhead da eseguire (è necessario inviare la nuova e la vecchia porta TCP insieme), e c'è un sovraccarico aggiuntivo, dal momento che il sistema operativo del server non può più identificare l'applicazione una singola porta - ha bisogno di associare l'applicazione con tutte le porte del server che utilizza (i client deve ancora farlo, ma un tipico cliente ha meno connessioni rispetto a un tipico server)
quello che vedi è
- due connessioni in entrata, appartenenti al server (porta locale: 1234). Ciascuno ha il proprio
Socket
nell'applicazione server.
- due connessioni esterne, appartenenti al client (porta remota: 1234). Ciascuno ha il proprio
Socket
nell'applicazione client.
- un ascolto di connessione, appartenente al server. Questo corrisponde al singolo
ServerSocket
che accetta le connessioni.
Poiché sono connessioni di loopback, è possibile vedere i due endpoint miscelati insieme su una singola macchina. È inoltre possibile visualizzare due porte client distinte (52506 e 52511), sia sul lato locale che sul lato remoto.
fonte
2012-12-30 15:30:21
Perché non è vero? Leggi su come funziona TCP. –
La semplice risposta che stai cercando è che non hai notato il LISTEN sulla destra .. è solo uno. –
ma il metodo accept restituisce due socket, stanno utilizzando la stessa porta su 127.0.0.1, giusto? – MrROY