In questa repo si discoutono le idee generali per poter mettere in pratica la programmazione in rete con Java attraverso l'utilizzo dell'approccio client-server (con i relativi Socket) e l'utilizzo pratico
- di un servizio privo di connessione con UDP
- di un servizio orientato alla connessione basato sullo streaming di un flusso di dati con TCP
Oggigiorno abbiamo a che fare con dispositivi che appartengo alla tassonomia MIMD il quale prevede l'esecuzione di più flussi di istruzione su più flussi di dati. A questo scopo è utile dire che con l'evoluzione dei calcolatori, abbiamo avuto la possibilità di poter realizzare (attraverso questa tassonomia)
- sistemi multicomputer, i quali ognuno di essi è connesso per poter cooperare in un risultato finale
- sistemi multiprocessore, i quali hanno più CPU (o meglio detti core) che operano in modo distribuito per poter ottnere un risultato.
e unificando questi due concetti, possiamo affermare con certezza che, indipendentemente dallo scopo, una rete di calcolatori è un sistema multicomputer e multiprocessore che lavora in modo distribuito su più flussi di dati.
Su questo presupposto, quindi, la programmazione di rete comporta l'utilizzo (oltre che l'uso degli indirizzi IP) dei numeri di porta. Precisiamo il loro scopo
- un indirizzo IP identifica in modo univoco la posizione esatta del dispositivo (o in gergo tecnico Host) all'interno della rete. Ciò implica che se il dispositivo cambia la sua disposizione in rete, cambierà anche il suo indirizzo IP
- un numero di porta, invece, è associato ad un processo di livello applicazione che richiede/offre il servizio (questo per la tassonomia MIMD)
A livello di rete si prevedono due tipologie di indirizzi IP che variano a seconda del protocollo di livello di rete utilizzato:
- Indirizzi IPv4 (a 32 bit)
- Indirizzi IPv6 (a 128 bit)
In Java, un indirizzo IP viene definito come oggetto della classe InetAddress
da cui derivano due sottoclassi, rispettivamente
Inet4Address
per istanziare indirizzi IPv4Inet6Address
per istanziare indirizzi IPv6
in generale, possiamo utilizzare solo la classe InetAddress
per poter gestire, ricavare le informazioni da entrambe le tipologie di indirizzi (per maggiori info, visionare JAVA tutorials!).