Programmazione socket in Java: una breve guida

Pubblicato: 2022-05-21

In Java, la programmazione socket è un mezzo per comunicare tra i programmi e rimanere connessi a diversi JRE, sia server orientati alla connessione che server non orientati alla connessione. Un socket server Java viene utilizzato esclusivamente per avviare ed elaborare la comunicazione tra un server e un client.

Questo blog tratterà tutto ciò che c'è da sapere sulla programmazione socket.

Sommario

Programmazione socket in Java

La programmazione socket è il processo di integrazione e utilizzo di nodi di rete separati in modo interattivo. È un sistema di comunicazione bidirezionale in cui un socket (nodo) è in ascolto su una porta specifica a un indirizzo IP mentre l'altro socket si connette.

Prese in Java

In Java, i socket sono un'estremità di un canale di comunicazione bidirezionale che collega due programmi in rete. Il livello TCP viene utilizzato per assegnare un numero di porta al socket Java specificato per identificare l'applicazione a cui stiamo trasferendo i dati. Usiamo la combinazione di un indirizzo IP e un numero di porta per creare un endpoint.

La piattaforma Java include una classe chiamata Socket, che implementa un lato di una connessione di rete bidirezionale tra l'applicazione Java e un altro programma. La classe si trova sopra un'implementazione indipendente dalla piattaforma, proteggendo il tuo programma Java dai dettagli specifici del sistema.

Usando la classe invece di un certo codice nativo, i tuoi programmi Java possono comunicare sulla rete in modo indipendente dalla piattaforma.

Inoltre, java.net include la classe ServerSocket, che implementa un socket che i server possono utilizzare per ascoltare e accettare connessioni dai client. Questo è un esempio che mostra come utilizzare le classi ServerSocket e Socket.

Tra la porta lato client e la porta lato server viene creata una connessione.

Stabilire una connessione Java Socket [LATO CLIENT]

Prima di continuare con la programmazione lato client, il client deve attendere l'avvio del server. Una volta installato e funzionante, inizierà a inviare query al server Java. Il client attenderà quindi la risposta del server. Questo è un buon riepilogo della logica di connessione client-server.

Esaminiamo la programmazione lato client in modo più dettagliato.

Per connetterti a un'altra macchina, avrai bisogno di una connessione presa. I due computer devono sapere dove si trovano sulla rete (indirizzo IP) e quale porta TCP stanno utilizzando per stabilire una connessione socket. Il framework java.net denota la classe socket.

L'indirizzo IP del server è il primo argomento di input. La porta TCP è il prossimo parametro qui. (Non è altro che un numero che indica quale programma deve essere avviato su un server.) HTTP, ad esempio, utilizza la porta 80. Di solito, l'intervallo dei numeri di porta è compreso tra 0 e 65535.

Comunicazione

I flussi vengono utilizzati per l'input e l'output di dati durante la comunicazione tramite una connessione socket. Dopo aver inviato le richieste e stabilito una connessione forte, è necessario disattivare la connessione socket.

Chiusura di una connessione socket server Java

La connessione socket viene chiusa in modo esplicito dopo l'invio del messaggio al server, la connessione socket viene chiusa in modo esplicito.

// Programma Java dimostrativo per la clientela

importa java.net.*;

importa java.io.*;

classe pubblica Client_Side_Program

{

// per inizializzare flussi socket, flussi di input e flussi di output

socket socket privato = null;

input DataInputStream privato = null;

privato DataOutputStream out = null;

// costruttore per inserire la porta TCP e l'indirizzo IP

client pubblico(String add, int port)

{

// stabilire una connessione

Tentativo

{

socket = nuovo Socket(aggiungi, porta);

System.out.println(“Connesso”);

// prende l'input dal terminale

input = nuovo DataInputStream(System.in);

// invia l'output al socket

out = nuovo DataOutputStream(socket.getOutputStream());

}

catch(UnknownHostException u)

{

System.out.println(u);

}

catch(IOException i)

{

System.out.println(i);

}

// stringa per leggere il messaggio dall'input

Riga della stringa = “”;

// continua a leggere finché non viene immesso "Over".

while (!line.equals(“Over”))

{

Tentativo

{

riga = input.readLine();

out.writeUTF(linea);

}

catch(IOException i)

{

System.out.println(i);

}

}

// chiude la connessione

Tentativo

{

input.close();

out.close();

socket.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(String args[])

{

Cliente cliente = nuovo Cliente(“127.0.0.1”, 5000);

}

}

Per visitare la fonte di questo codice, fare clic qui .

Stabilire una connessione Java Socket [LATO SERVER]

Il server crea il suo oggetto e attende la richiesta del client considerando la connessione lato socket del server Java. Il server interagirà con il client una volta inviata la richiesta. Avrai bisogno di due socket per codificare l'applicazione lato server, che è la seguente: quando un client crea un nuovo Socket(), viene creato un ServerSocket per attendere le richieste del client. Un socket semplice può essere definito come un programma che avvia la comunicazione lato server con il client. È possibile comunicare le risposte con il client di conseguenza, una volta ottenuto il report dalla connessione socket lato server java.

Comunicazione

Per utilizzare il socket per inviare l'output, generalmente non vediamo l'ora di utilizzare il metodo getOutputStream().

Chiusura di una connessione socket server Java

È fondamentale terminare la connessione spegnendo sia la presa che i flussi di ingresso-uscita.

// Un programma java del server

importa java.net.*;

importa java.io.*;

Server di classe pubblica

{

//inizializza il socket e il flusso di input

socket socket privato = null;

server ServerSocket privato = nullo;

privato DataInputStream in = null;

// costruttore con port

Server pubblico (porta int)

{

// attende una connessione dopo aver avviato un server

Tentativo

{

server = nuovo ServerSocket(porta);

System.out.println(“Server: avviato”);

System.out.println(“In attesa dell'arrivo di un cliente…”);

socket = server.accept();

System.out.println(“Il cliente è stato accettato”);

// per prendere l'input del socket client

in = nuovo DataInputStream(

new BufferedInputStream(socket.getInputStream()));

Riga della stringa = “”;

// per leggere il messaggio dal client fino all'invio di "Over".

while (!line.equals(“Over”))

{

Tentativo

{

riga = in.readUTF();

System.out.println(riga);

}

catch(IOException i)

{

System.out.println(i);

}

}

System.out.println(“Chiusura connessione”);

// chiudi la connessione

socket.close();

in.close();

}

catch(IOException i)

{

System.out.println(i);

}

}

public static void main(String args[])

{

Server server = nuovo Server(5000);

}

}

Per verificare i dettagli di questo codice, fare clic qui .

È possibile eseguire prima il software lato server dopo aver configurato sia il client che il server. Quindi, è necessario eseguire il software lato client e inviare la richiesta. Il server reagirà immediatamente quando la richiesta arriva dal client.

Esplora i nostri corsi di ingegneria del software popolari

SL. No Programmi di sviluppo software
1 Master of Science in Informatica presso LJMU e IIITB Programma di certificazione di sicurezza informatica Caltech CME
2 Bootcamp di sviluppo full stack Programma PG in Blockchain
3 Executive Post Graduate Program in Software Development - Specializzazione in DevOps Visualizza tutti i corsi di ingegneria del software

Terminale o prompt dei comandi in esecuzione

Per avviare il terminale o il prompt dei comandi, utilizzeremo i seguenti comandi. Per cominciare, creeremo due finestre, una dedicata al server e l'altra al client.

  1. Lascia che il programma Server inizi a funzionare.

$ server java

  1. Quindi, in un terminale diverso, avviare l'applicazione Client come,

client java $

Il software mostrerà "Connesso" e "Client Accettato" quando il server accetta il client.

  1. Nella casella Cliente, puoi quindi iniziare a inserire i messaggi. Ecco un esempio di input del Cliente.

Ciao! Questo segna la mia prima connessione presa professionale.

Che il server ottiene e visualizza allo stesso tempo

Ciao! Questo segna la mia prima connessione presa professionale.

Al di sopra di.

Chiusura del collegamento

Come detto in precedenza, l'invio di “Over” pone fine alla connessione tra il Cliente e il Server.

Leggi i nostri articoli popolari relativi allo sviluppo software

Come implementare l'astrazione dei dati in Java? Che cos'è Inner Class in Java? Identificatori Java: definizione, sintassi ed esempi
Comprensione dell'incapsulamento in OOPS con esempi Spiegazione degli argomenti della riga di comando in C Le 10 principali caratteristiche e caratteristiche del cloud computing nel 2022
Polimorfismo in Java: concetti, tipi, caratteristiche ed esempi Pacchetti in Java e come usarli? Tutorial Git per principianti: impara Git da zero

Conclusione

La programmazione Java Socket è uno strumento essenziale che procede utilizzando le API socket per stabilire la comunicazione tra le applicazioni client-server locali e remote. Una corretta conoscenza della programmazione socket può migliorare le connessioni avanti e indietro di server e client.

Se stai cercando di imparare Java e padroneggiare lo sviluppo full-stack, abbiamo solo il corso ad alto impatto per te: Programma Executive PG di upGrad in Sviluppo Software - Specializzazione in Sviluppo Full Stack .

Il programma di 13 mesi di IIIT-B è progettato per aiutare gli studenti ad acquisire competenze come nozioni di base di informatica, processi di sviluppo software, API di back-end e interfaccia utente Web interattiva. Ottieni l'accesso a un Bootcamp di transizione alla carriera del software sia per i non tecnici che per i nuovi programmatori per affinare le loro capacità di programmazione e supporto professionale a 360° da upGrad.

Impara i corsi di sviluppo software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Quali sono i vantaggi dell'apprendimento della programmazione socket Java?

I socket possono essere usati per costruire un'applicazione client-server, come una chat, dal punto di vista della rete. I socket sono implementati al livello più elementare di sicurezza per scoprire se le porte di un sistema sono aperte, se esistono programmi standard di scansione delle porte come Nmap e se possono essere utilizzati a un livello basso. Possono essere utilizzati nello stesso modo in cui il comando SSH - Secure Socket Shell può essere utilizzato per connettersi a un server esterno tramite una shell inversa.

A cosa serve la funzione di accettazione?

La funzione di accettazione attende che un client si connetta al server bloccando la permanenza fino all'arrivo di un argomento. Quindi utilizziamo la funzione getInputStream per ottenere input dal socket. Il server è progettato in modo tale da continuare ad accettare i messaggi inviati fino a quando non viene ricevuto il comando Over.

Perché i thread vengono utilizzati nella programmazione di rete?

Vogliamo che più clienti si uniscano contemporaneamente. Quindi, dobbiamo impiegare thread sul lato server in modo che un thread diverso possa gestire ogni richiesta del client. Assumiamo una situazione in cui due richieste giungono al server contemporaneamente. Poiché nella nostra semplice applicazione server-client non viene fornito alcun metodo per elaborare più richieste contemporaneamente, la richiesta che arriva anche con un nanosecondo di anticipo sarà in grado di connettersi al server, mentre l'altra richiesta verrà rifiutata.