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:
- Adreça IP del servidor, i
- 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.
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ètode | Descripció |
---|---|
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ètode | Descripció |
---|---|
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.
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(); }}