Skip to content

Agrigah/Java_OOP_Sockets_Project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📂 Getting into Practice: Java OOP & Sockets – Java Project

📋 Présentation du projet

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


📦 Partie I : Multithreading

1️⃣ Exercice 1 – Bank Account (Race Condition)

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é.
image

📌 Concepts utilisés

  • Classe Thread
  • Synchronisation avec synchronized
  • Gestion de la ressource partagée

2️⃣ Exercice 2 – Seat Booking System

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.
image

📌 Concepts utilisés

  • Threads
  • Synchronization
  • Gestion de ressources partagées

📦 Partie II : Sockets et Réseau

3️⃣ Exercice 3 – Magic Number Guessing Game (TCP)

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_LOW ou CORRECT.
  • Affiche le nombre de tentatives pour trouver le nombre.
image image

📌 Concepts utilisés

  • ServerSocket et Socket
  • BufferedReader et PrintWriter
  • Gestion d’entrées/sorties réseau
  • Communication client-serveur

4️⃣ Exercice 4 – UDP Chat (Peer-to-Peer)

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

image image

📌 Concepts utilisés

  • DatagramSocket et DatagramPacket
  • Communication UDP
  • Lecture et envoi de messages via le réseau

🚀 Exécution du projet

Chaque exercice contient une classe avec un main().

🔹 Partie I – Multithreading

  1. Exercice 1 : Main.java (package exercice1_bank)
  2. Exercice 2 : Main2.java (package exercice2_bus)

🔹 Partie II – Sockets

  1. Exercice 3 : Server.java puis ClientSocket.java (package exercice3_magic_tcp)
  2. Exercice 4 : UDPReceiver.java puis UDPSender.java (package exercice4_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

✅ Compétences acquises

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages