Université de Monastir Développement des Applications Réparties
Institut Supérieur d’Informatique Niveau d’étude : L3 Informatique
Et de Mathématiques de Monastir (ISIMM) Année Universitaire : 2022/2023
TP2 : Programmation Répartis avec les sockets TCP
Objectifs du TP :
Ce TP a pour objectif de manipuler la communication client/serveur via les sockets
avec Java.
Les Sockets
Un socket est un point de terminaison dans une communication bidirectionnelle
entre deux programmes fonctionnant sur un réseau. Un socket est associé à un
numéro de port afin que la couche TCP puisse identifier l’application vers laquelle les
données doivent être transmises. En fonctionnement normal, une application serveur
fonctionne sur un ordinateur et possède un socket d’écoute associée à un port
d’écoute. Le serveur attend une demande de connexion de la part d’un client sur ce
port.
Si tout se passe bien, le serveur accepte la connexion. À la suite de cette acceptation,
le serveur crée un nouveau socket associé à un nouveau port appelé Socket
d’échange. Ainsi il pourra communiquer avec le client, tout en continuant l’écoute sur
le socket initial appelé Socket d’écoute en vue d’autres connexions
1. Chaque machine crée un socket,
2. Chaque socket sera associé à un port de sa machine hôte,
3. Les deux sockets seront explicitement connectés si on utilise un protocole en
modeconnecté ...,
4. Chaque machine lit et/ou écrit dans son socket,
5. Les données vont d’un socket à une autre à travers le réseau,
6. Une fois terminé, chaque machine ferme son socket
1
Exercice 1 : copier et exécuter l’exemple de cours.
Coté serveur : Coté client:
import java.net.*; Import java.net.*;
import java.io.*; import java.io.*;
public class import java.util.Scanner;
Serveur1 { public class Client1 {
public static void main(String[] args){ public static void main(String[] args) {
try { try {
ServerSocket ss = new Socket s = new Socket("localhost", 1234);
ServerSocket(1234); InputStream is=s.getInputStream();
System.out.println("J’attends une OutputStream os=s.getOutputStream();
connexion");
Scanner clavier = new Scanner(System.in);
Socket s = ss.accept();
System.out.println("Donner un nombre");
InputStream is=s.getInputStream();
int nb=clavier.nextInt();
OutputStream os=s.getOutputStream();
os.write(nb);
System.out.println("J’attends un
int res = is.read();
nombre");int nb=is.read();
System.out.println("Res ="+res);
int res=nb*3;
os.write(res);
System.out.println("J’envoies la
s.close();
réponse");os.write(res);
} catch (Exception e){ e.printStackTrace();
s.close(); }
ss.close(); }
} catch (Exception e){ e.printStackTrace(); }
}
}
}
2
Exercice 2 :
Coté serveur
import
java.io.*;
import
java.net.*;
import
java.util.Date;
public class TimeServer {
public static void main(String[] args) {
int port = 1234;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("le serveur est en écoute en port" + port);
Socket socket = serverSocket.accept(); System.out.println("Un client est
connecté");
OutputStream output = socket.getOutputStream(); PrintWriter writer = new
PrintWriter(output, true);
writer.println(new Date().toString())
socket.close();
serverSocket.close();
} catch (IOException ex) {
System.out.println("Server exception: " + ex.getMessage());ex.printStackTrace();
}
}
}
Coté client:
import
java.net.
*;import
java.io.*
;
3
public class TimeClient {
public static void main(String[] args) {
try (Socket socket = new Socket(localhost,1234)) {
InputStream input = socket.getInputStream(); BufferedReader reader = new
BufferedReader(new
InputStreamReader(input));
String time = reader.readLine();System.out.println(time);
socket.close();
} catch (UnknownHostException ex) {
System.out.println("Server not found: " + ex.getMessage());
} catch (IOException ex) {
System.out.println("I/O error: " + ex.getMessage());
}
}
}
Exercice 3 :
On veut développer une application client/serveur utilisant les sockets TCP. Cette
application permet au serveur de recevoir le nom d’une personne et de renvoyer
au client une chaîne de caractère de la forme
« Bonjour Mr »+str.
Exercice 4 :
Refaire l’exercice précédent mais cette fois en rendant le serveur un serveur
multi-clients itératifs.
Exercice 5 :
Refaire le même exercice mais cette fois pour un serveur multi-clients concurrents