Ce projet analyse le comportement de la fonction rand() en C à travers une architecture distribuée client-serveur. Il permet de générer et d'analyser une grande quantité de nombres aléatoires (jusqu'à 12000 milliards dans nos tests) en utilisant plusieurs ordinateurs en réseau.
- Architecture client-serveur pour la distribution des calculs
- Support de multiples clients simultanés (testé avec 19 clients)
- Communication réseau via sockets TCP/IP
- Capacité de traitement massif (12000 milliards de nombres testés)
- Menu interactif pour lancer le client ou le serveur
- Validation automatique des adresses IP et ports
- Compilation automatique avec optimisation (-O3)
- Gestion robuste des erreurs de saisie
- Messages d'interface personnalisables via fichiers texte
- Architecture multi-processus (6 processus par instance)
- Synchronisation via sémaphores
- Gestion de mémoire partagée (IPC)
- Traitement parallèle sur plusieurs machines
- Génération de fichiers CSV pour l'analyse
- Calcul des occurrences minimum et maximum
- Analyse des ratios de distribution
- Visualisation des données
- Système d'exploitation Linux/Unix
- Compilateur GCC
- Réseau local pour le mode distribué
- Clonez le dépôt :
git clone https://www-apps.univ-lehavre.fr/forge/bh243413/etude_fonction_rand_c
cd Analyse-Random-C
- Compilez les programmes :
gcc -o main main.c
- Lancez le programme principal :
./main
- Suivez les instructions du menu pour :
- Lancer un serveur en spécifiant l'adresse IP, le port et le nombre de clients
- Ou lancer un client en spécifiant l'adresse IP et le port du serveur
Si vous préférez compiler et exécuter les programmes individuellement :
- Pour le serveur :
gcc -o server server.c
./server [adresseIP:port] [nombreClients]
# Exemple : ./server 127.0.0.1:8080 19
- Pour le client :
gcc -o client client.c
./client [adresseIP:port]
# Exemple : ./client 127.0.0.1:8080
#define TAILLE_TABLEAU (1<<28) // Taille du tableau des occurrences
#define NBR_PROCESSUS 6 // Nombre de processus
#define NBR_CYCLES 10 // Nombre de cycles
#define NBR_RANDOMS (10000000000LL) // Nombres aléatoires par cycle
int nbrClientPrevus = 1; // Nombre de clients à attendre
long long nbr_total_rand_generer = 1200000000000LL; // Nombre total de nombres à générer
.
|__ main.c # Programme principal (menu interactif)
├── server.c # Code source du serveur
├── client.c # Code source du client
├── log/ # Dossiers des logs
│ ├── server/
│ │ └── log.txt # Logs serveur
│ └── client/
│ └── log.txt # Logs client
├── CSV/ # Fichiers de données générés
│ ├── donnees_index_occurence.csv
│ └── donnees_ratio_max_min.csv
└── text/ # Messages d'interface
├── main/
│ └── text_bienvenue.txt
├── server/
│ ├── text_bienvenue.txt
│ └── text_fin.txt
└── client/
├── text_bienvenue.txt
└── text_fin.txt
-
Interface
- Affichage du menu de sélection
- Validation des entrées utilisateur
- Compilation automatique des programmes
-
Configuration
- Validation des adresses IP
- Vérification des ports (1-65535)
- Limitation du nombre de clients (1-100)
-
Initialisation
- Configuration du socket serveur
- Création de la mémoire partagée et des sémaphores
- Attente des connexions clients
-
Traitement
- Réception des données des clients
- Synchronisation des tableaux d'occurrences
- Génération des statistiques globales
-
Analyse
- Calcul des occurrences min/max
- Génération des fichiers CSV
- Production des ratios de distribution
-
Génération
- Création des processus de génération
- Production des nombres aléatoires
- Synchronisation locale via sémaphores
-
Communication
- Connexion au serveur
- Envoi des données
- Nettoyage des ressources
Le système maintient des logs détaillés pour le serveur et le client :
- Horodatage de chaque opération
- Suivi des connexions réseau
- Statistiques de génération
- Erreurs et succès
-
donnees_index_occurence.csv
- Index des nombres générés
- Nombre d'occurrences pour chaque valeur
-
donnees_ratio_max_min.csv
- Ratio de distribution
- Valeurs maximales et minimales
- Statistiques globales
- BA Hamadou
- BA Salimatouh Maliah
15 Décembre 2024
- Le programme principal doit être exécuté depuis la racine du projet
- Le programme a été testé avec succès sur 19 clients simultanés
- Capacité de génération de 12000 milliards de nombres aléatoires
- Utilisation optimale sur un réseau local pour les performances
Ce projet est distribué sous licence MIT. Voir le fichier LICENSE
pour plus de détails.