La programmation Java Socket est utilisée pour la communication entre les applications exécutées sur différents JRE.
La programmation Java Socket peut être orientée connexion ou sans connexion.
Les classes Socket et ServerSocket sont utilisées pour la programmation de socket orientée connexion et les classes DatagramSocket et DatagramPacket sont utilisées pour la programmation de socket sans connexion.
Le client en programmation socket doit connaître deux informations :
- Adresse IP du serveur, et
- Numéro de port.
Ici, nous allons établir une communication client et serveur unidirectionnelle. Dans cette application, le client envoie un message au serveur, le serveur lit le message et l'imprime. Ici, deux classes sont utilisées : Socket et ServerSocket. La classe Socket est utilisée pour communiquer entre client et serveur. Grâce à ce cours, nous pouvons lire et écrire un message. La classe ServerSocket est utilisée côté serveur. La méthode accept() de la classe ServerSocket bloque la console jusqu'à ce que le client soit connecté. Après la connexion réussie du client, il renvoie l'instance de Socket côté serveur.
Classe de socket
Un socket est simplement un point final pour les communications entre les machines. La classe Socket peut être utilisée pour créer un socket.
Méthodes importantes
Méthode | Description |
---|---|
1) public InputStream getInputStream() | renvoie le InputStream attaché à ce socket. |
2) OutputStream public getOutputStream() | renvoie le OutputStream attaché à ce socket. |
3) fermeture vide synchronisée publique () | ferme cette prise |
Classe ServerSocket
La classe ServerSocket peut être utilisée pour créer un socket serveur. Cet objet est utilisé pour établir la communication avec les clients.
Méthodes importantes
Méthode | Description |
---|---|
1) Prise publique accepter() | renvoie le socket et établit une connexion entre le serveur et le client. |
2) fermeture vide synchronisée publique () | ferme le socket du serveur. |
Exemple de programmation Java Socket
Création du serveur :
Pour créer l'application serveur, nous devons créer l'instance de la classe ServerSocket. Ici, nous utilisons le numéro de port 6666 pour la communication entre le client et le serveur. Vous pouvez également choisir n'importe quel autre numéro de port. La méthode accept() attend le client. Si les clients se connectent avec le numéro de port donné, il renvoie une instance de Socket.
ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection and waits for the client
Création du client :
Pour créer l'application client, nous devons créer l'instance de la classe Socket. Ici, nous devons transmettre l'adresse IP ou le nom d'hôte du serveur et un numéro de port. Ici, nous utilisons « localhost » car notre serveur fonctionne sur le même système.
Socket s=new Socket('localhost',6666);
Voyons une simple programmation de socket Java où le client envoie un texte et le serveur le reçoit et l'imprime.
Fichier : MonServeur.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);} } }
Fichier : MonClient.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);} } }téléchargez cet exemple
Pour exécuter ce programme, ouvrez deux invites de commande et exécutez chaque programme à chaque invite de commande, comme indiqué dans la figure ci-dessous.
Après avoir exécuté l'application client, un message s'affichera sur la console du serveur.
Exemple de programmation Java Socket (lecture-écriture des deux côtés)
Dans cet exemple, le client écrira d'abord sur le serveur, puis le serveur recevra et imprimera le texte. Ensuite, le serveur écrira au client et le client recevra et imprimera le texte. L'étape continue.
Fichier : MonServeur.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(); }}
Fichier : MonClient.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(); }}