logo

Programmazione con socket Java

La programmazione Java Socket viene utilizzata per la comunicazione tra le applicazioni in esecuzione su JRE diversi.

La programmazione Java Socket può essere orientata alla connessione o senza connessione.

Le classi Socket e ServerSocket vengono utilizzate per la programmazione socket orientata alla connessione, mentre le classi DatagramSocket e DatagramPacket vengono utilizzate per la programmazione socket senza connessione.

Il client nella programmazione del socket deve conoscere due informazioni:

  1. Indirizzo IP del server e
  2. Numero di porta.

Qui, effettueremo una comunicazione client e server unidirezionale. In questa applicazione, il client invia un messaggio al server, il server legge il messaggio e lo stampa. Qui vengono utilizzate due classi: Socket e ServerSocket. La classe Socket viene utilizzata per comunicare tra client e server. Attraverso questa classe possiamo leggere e scrivere messaggi. La classe ServerSocket viene utilizzata sul lato server. Il metodo accetta() della classe ServerSocket blocca la console finché il client non viene connesso. Dopo aver stabilito con successo la connessione del client, restituisce l'istanza di Socket sul lato server.

Programmazione socket in Java

Classe presa

Un socket è semplicemente un endpoint per le comunicazioni tra le macchine. La classe Socket può essere utilizzata per creare un socket.

Metodi importanti

MetodoDescrizione
1) InputStream pubblico getInputStream()restituisce l'InputStream collegato a questo socket.
2) OutputStream pubblico getOutputStream()restituisce l'OutputStream collegato a questo socket.
3) chiusura vuota sincronizzata pubblica()chiude questo socket

Classe ServerSocket

La classe ServerSocket può essere utilizzata per creare un socket server. Questo oggetto viene utilizzato per stabilire la comunicazione con i client.

Metodi importanti

MetodoDescrizione
1) Socket pubblico accetta()restituisce il socket e stabilisce una connessione tra server e client.
2) chiusura vuota sincronizzata pubblica()chiude il socket del server.

Esempio di programmazione socket Java

Creazione del server:

Per creare l'applicazione server, dobbiamo creare l'istanza della classe ServerSocket. Qui utilizziamo il numero di porta 6666 per la comunicazione tra client e server. Puoi anche scegliere qualsiasi altro numero di porta. Il metodo accetta() attende il client. Se i client si connettono con il numero di porta specificato, restituisce un'istanza di Socket.

 ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client 

Creazione del cliente:

Per creare l'applicazione client, dobbiamo creare l'istanza della classe Socket. Qui dobbiamo passare l'indirizzo IP o il nome host del server e un numero di porta. Qui utilizziamo 'localhost' perché il nostro server è in esecuzione sullo stesso sistema.

 Socket s=new Socket('localhost',6666); 

Vediamo una semplice programmazione del socket Java in cui il client invia un testo e il server lo riceve e lo stampa.

File: MioServer.java

 import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println('message= '+str); ss.close(); }catch(Exception e){System.out.println(e);} } } 

File: MioClient.java

 import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket('localhost',6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF('Hello Server'); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } } 
scarica questo esempio

Per eseguire questo programma aprire due prompt dei comandi ed eseguire ciascun programma a ciascun prompt dei comandi come mostrato nella figura seguente.

Dopo aver eseguito l'applicazione client, verrà visualizzato un messaggio sulla console del server.

Programmazione di rete Java

Esempio di programmazione socket Java (lettura-scrittura su entrambi i lati)

In questo esempio, il client scriverà prima sul server, quindi il server riceverà e stamperà il testo. Quindi il server scriverà al client e il client riceverà e stamperà il testo. Il passo continua.

File: MioServer.java

 import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=din.readUTF(); System.out.println('client says: '+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); }} 

File: MioClient.java

 import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket('localhost',3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str='',str2=''; while(!str.equals('stop')){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println('Server says: '+str2); } dout.close(); s.close(); }}