Ce projet illustre l’utilisation de la programmation orientée objet en Java, la gestion de threads (multithreading) et la communication réseau (sockets TCP/UDP) à travers quatre exercices pratiques. Il couvre la synchronisation des ressources partagées, la communication client-serveur, ainsi que le développement d’une application chat peer-to-peer.
Auteur : Aya Agrigah
GitHub : Java_OOP_Sockets_Project
Cours : Programmation Orientée Objet en Java
Année académique : 2025/2026
Encadrante : Loubna Aminou
Objectif : Gérer un compte bancaire partagé entre plusieurs clients et illustrer les problèmes de race condition.
🎯 Fonctionnalités
- Création d’un compte bancaire avec solde initial.
- Deux clients (threads) tentent de retirer de l’argent simultanément.
- Observations :
- Sans synchronisation : le solde peut devenir négatif.
- Avec
synchronized: le solde est correctement protégé.
📌 Concepts utilisés
- Classe Thread
- Synchronisation avec
synchronized - Gestion de la ressource partagée
Objectif : Réserver des sièges dans un bus avec plusieurs clients en simultané, et corriger les problèmes de race condition.
🎯 Fonctionnalités
- Bus avec un nombre limité de sièges.
- Deux passagers (threads) tentent de réserver des places en même temps.
- Observations :
- Sans synchronisation : il est possible de réserver plus de sièges que disponibles.
- Avec
synchronized: réservation correcte.
📌 Concepts utilisés
- Threads
- Synchronization
- Gestion de ressources partagées
Objectif : Créer un jeu réseau client-serveur où le serveur génère un nombre aléatoire et le client doit le deviner.
🎯 Fonctionnalités
- Serveur TCP générant un nombre magique entre 0 et 100.
- Le client envoie des suppositions.
- Le serveur répond :
TOO_HIGH,TOO_LOWouCORRECT. - Affiche le nombre de tentatives pour trouver le nombre.
📌 Concepts utilisés
ServerSocketetSocket- BufferedReader et PrintWriter
- Gestion d’entrées/sorties réseau
- Communication client-serveur
Objectif : Créer une mini-application de chat utilisant les sockets UDP pour la communication peer-to-peer.
🎯 Fonctionnalités
- Receiver UDP en écoute sur un port.
- Sender UDP envoyant des messages vers le receiver.
- Communication continue jusqu’à la saisie de
bye. - Affichage de l’adresse IP de l’expéditeur pour chaque message reçu.
🧾 Exemple d’affichage
📌 Concepts utilisés
DatagramSocketetDatagramPacket- Communication UDP
- Lecture et envoi de messages via le réseau
Chaque exercice contient une classe avec un main().
- Exercice 1 :
Main.java(packageexercice1_bank) - Exercice 2 :
Main2.java(packageexercice2_bus)
- Exercice 3 :
Server.javapuisClientSocket.java(packageexercice3_magic_tcp) - Exercice 4 :
UDPReceiver.javapuisUDPSender.java(packageexercice4_udp_chat)
Dans IntelliJ IDEA :
- Clic droit sur la classe Java
- Sélectionner Run [ClassName].main()
- Suivre les instructions affichées dans la console pour chaque exercice
- Multithreading et synchronisation (
synchronized, race condition) - Communication réseau (TCP et UDP)
- Gestion de ressources partagées
- Programmation orientée objet avancée en Java
- Conception et exécution d’applications console interactives