logo

Programació de Java Socket

La programació de Java Socket s'utilitza per a la comunicació entre les aplicacions que s'executen en diferents JRE.

La programació de Java Socket pot estar orientada a connexió o sense connexió.

Les classes Socket i ServerSocket s'utilitzen per a la programació de socket orientada a la connexió i les classes DatagramSocket i DatagramPacket s'utilitzen per a la programació de socket sense connexió.

El client en programació de socket ha de conèixer dues dades:

  1. Adreça IP del servidor, i
  2. Número de port.

Aquí, farem una comunicació unidireccional amb el client i el servidor. En aquesta aplicació, el client envia un missatge al servidor, el servidor llegeix el missatge i l'imprimeix. Aquí s'estan utilitzant dues classes: Socket i ServerSocket. La classe Socket s'utilitza per comunicar client i servidor. A través d'aquesta classe, podem llegir i escriure missatges. La classe ServerSocket s'utilitza al costat del servidor. El mètode accept() de la classe ServerSocket bloqueja la consola fins que el client estigui connectat. Després de la connexió correcta del client, retorna la instància de Socket al costat del servidor.

Programació de socket en Java

Classe de presa

Un sòcol és simplement un punt final per a les comunicacions entre les màquines. La classe Socket es pot utilitzar per crear un socket.

Mètodes importants

MètodeDescripció
1) InputStream públic getInputStream()retorna l'InputStream connectat amb aquest sòcol.
2) Public OutputStream getOutputStream()retorna el OutputStream connectat amb aquest sòcol.
3) tancament de buit sincronitzat públic ()tanca aquesta presa

Classe ServerSocket

La classe ServerSocket es pot utilitzar per crear un sòcol de servidor. Aquest objecte s'utilitza per establir comunicació amb els clients.

Mètodes importants

MètodeDescripció
1) Acceptar el sòcol públic ()retorna el sòcol i estableix una connexió entre el servidor i el client.
2) tancament de buit sincronitzat públic ()tanca el sòcol del servidor.

Exemple de programació de Java Socket

Creació del servidor:

Per crear l'aplicació del servidor, hem de crear la instància de la classe ServerSocket. Aquí, estem utilitzant el número de port 6666 per a la comunicació entre el client i el servidor. També podeu triar qualsevol altre número de port. El mètode accept() espera el client. Si els clients es connecten amb el número de port donat, retorna una instància de Socket.

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

Creació del client:

Per crear l'aplicació client, hem de crear la instància de la classe Socket. Aquí, hem de passar l'adreça IP o el nom d'amfitrió del servidor i un número de port. Aquí, estem utilitzant 'localhost' perquè el nostre servidor s'executa al mateix sistema.

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

Vegem una senzilla programació de socket Java on el client envia un text i el servidor el rep i l'imprimeix.

Fitxer: MyServer.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);} } } 

Fitxer: MyClient.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);} } } 
descarregueu aquest exemple

Per executar aquest programa, obriu dos indicadors d'ordres i executeu cada programa a cada indicador d'ordres, tal com es mostra a la figura següent.

Després d'executar l'aplicació client, es mostrarà un missatge a la consola del servidor.

Programació de xarxes Java

Exemple de programació de sòcols de Java (lectura-escriptura a banda i banda)

En aquest exemple, el client escriurà primer al servidor i després el servidor rebrà i imprimirà el text. Aleshores, el servidor escriurà al client i el client rebrà i imprimirà el text. El pas segueix.

Fitxer: MyServer.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(); }} 

Fitxer: MyClient.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(); }}