Vous êtes sur la page 1sur 6

University of Boumerdes, Mhamed Bougara. Faculty of Science.

Department of
Computer Science
Network Programming -Master 1 2022-23-
Series n° 4
Exercice 1 : 1 serveur- 1 client
Dans cet exercice, vous devez implémenter un programme client-serveur pour la communication par
sockets en utilisant la classe Socket de Java. Nous avons la classe Car avec les champs suivants :
model, price et year. Cette classe doit implémenter l'interface Serializable.
import java.io.Serializable;

public class Car implements Serializable {


private String model;
private int price, year;

public Car(String m, int p, int y) { model = m; price = p; year = y; }

public String getModel() {return model;}


public int getPrice() {return price;}
public int getYear() {return year;}
@Override
public String toString() { return "[model='" + model + '\'' +", price=" + price +
", year=" + year +']'; }

public static void main(String A[]) {


Car car1 = new Car("peugeot 207", 120, 2010);
System.out.println(car1.toString());
}
}

1. Écrivez un programme serveur qui écoute sur le port 1234. Le serveur doit être capable de
recevoir un objet Car du client, l'afficher dans la console, puis envoyer un objet Car en réponse
au client. Le serveur doit s'arrêter après avoir traité une seule requête.
2. Écrivez un programme client qui se connecte au serveur sur le port 1234, envoie un objet Car au
serveur, affiche la réponse dans la console, puis se déconnecte.
3. Testez votre programme en exécutant d'abord le serveur, puis en exécutant le client. Assurez-
vous que le client reçoit la réponse correcte du serveur.
4. Modifiez le programme client pour qu'il envoie plusieurs objets Car au serveur, puis affiche la
réponse pour chaque objet dans la console. Assurez-vous que le serveur traite chaque requête
correctement et renvoie la réponse appropriée.

Exercice 2 : 1 serveur/ n clients


Le serveur DNS fournie aux clients l’adresse IP d’une machine distante suite à une demande formulé
sous forme d’une adresse url. Par exemple : un client A envoie au serveur DNS l’url "google.com", le
serveur cherche dans une table DNS, contenant les urls et les adresses IP correspondantes, l’adresse
IP de site web et l’envoie au client.

Nous voulons écrire le code source des deux classes ServerDNS et ClientDNS permettant de gérer un
service DNS. Nous voulons ensuite que le ServerDNS puisse gérer en temps réel des requêtes venant
de plusieurs ClientDNS. Pour cela, nous devons ajouter un thread ServiceDNS dans laquelle nous
introduisons la table DNS. Le ServerDNS est à l’écoute des requêtes venant des ClientDNS. Et quand
une nouveau se connecte, un nouveau thread ServiceDNS est créée et la socket correspondante est
envoyée au ServiceDNS pour qu’il communique avec le Client.
Exercice 3 : UDP

Écrire un client et un serveur communiquant en UDP de sorte que le client envoie un texte au serveur
qui le met en majuscule et le lui retourne.
Correction
Exercice 1
package serie4;

import java.io.*;
import java.net.*;

public class Client {


public static void main(String[] args) throws IOException {
String adresseServeur = "localhost";
Socket socket = new Socket(adresseServeur, 1234);

ObjectOutputStream objectOutputStream = new


ObjectOutputStream(socket.getOutputStream());
Car car = new Car("renault Clio 4", 200, 2014);
objectOutputStream.writeObject(car);

ObjectInputStream objectInputStream = new


ObjectInputStream(socket.getInputStream());
try {
// Read a Car object from the server
Car responseCar = (Car) objectInputStream.readObject();
System.out.println("Recevoir Car du serveur: " +
responseCar.toString());

} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
objectOutputStream.close();
objectInputStream.close();
socket.close();
}
}
}

package serie4;

import java.io.*;
import java.net.*;

public class Serveur {


public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(1234);
System.out.println("Serveur en écoute sur le port 1234");

Socket socket = serverSocket.accept();


System.out.println("Client connecté: " + socket.getInetAddress());

ObjectInputStream objectInputStream = new


ObjectInputStream(socket.getInputStream());
try {
// Read a Car object from the client
Car car = (Car) objectInputStream.readObject();
System.out.println("Recevoir Car du client: " + car.toString());
// Send a Car object back to the client
ObjectOutputStream objectOutputStream = new
ObjectOutputStream(socket.getOutputStream());
Car responseCar = new Car("Toyota Corolla", 150, 2009);
objectOutputStream.writeObject(responseCar);

} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
objectInputStream.close();
socket.close();
serverSocket.close();
}
}
}

Exercice 2
package serie4;

import java.io.*;
import java.net.*;

public class ServerDNS {


public static void main(String[] args) throws IOException {
boolean stop = false;
ServerSocket serverSocket = new ServerSocket(1234);
System.out.println("Serveur en écoute sur le port 1234");
Socket socket = null;
while (!stop) {
socket = serverSocket.accept();
new ServiceDNS(socket).start();
}
serverSocket.close();
}
}

package serie4;

import java.io.*;
import java.net.Socket;
public class ServiceDNS extends Thread {
static String [][] listDNS = {{"142.250.217.78", "google.com"},
{"142.251.33.69" , "gmail.com"},
{"40.89.244.232" , "duckduckgo.com"},
{"157.240.3.35" , "facebook.com"},
{"216.58.206.238" , "youtube.com"},
{"66.211.175.229" , "ebay.com"},
};
Socket sclient;
public ServiceDNS(Socket s) {
sclient = s;
}

public void run() {


try {
// des flux de lecture et ecriture
BufferedReader bis = new BufferedReader(new
InputStreamReader(sclient.getInputStream()));
PrintWriter bos = new
PrintWriter(sclient.getOutputStream(), true);
System.out.println("geting url ");
String lien = bis.readLine(); // lire l'url

String adresse =null;


for (int i = 0; i<6;i++) // chercher l'adresse
correspondante
if (listDNS[i][1].equals(lien)) { // si le lien
est trouvé
adresse = listDNS[i][0]; // save l'adresse
IP
break;
}

if (adresse !=null)
bos.println(adresse); // envoyer l'adresse au
client
else System.out.println("adresse non trouvee! vérifiez
l'url ");
bis.close(); // fermer les flux et la socket
bos.close();
sclient.close();

} catch (IOException e) {
e.printStackTrace();
}
}
}

package serie4;

import java.io.*;
import java.net.Socket;

public class ClientDNS {


public static void main(String[] args) {
String adresseServeur = "localhost";
try {
Socket socket = new Socket(adresseServeur, 1234);
PrintWriter bos = new PrintWriter(socket.getOutputStream(),
true);
BufferedReader bis = new BufferedReader(new
InputStreamReader(socket.getInputStream()));

String url = "google.com";


bos.println(url);

// Read address
String adr = bis.readLine();
System.out.println("l'adresse de :" + url + " est : " + adr);

bis.close();
bos.close();
socket.close();
} catch (IOException e) {
System.err.println(e);
}

}
}

Exercice 3

Vous aimerez peut-être aussi