Programmation
Réseau
C.T. Bernard KABUATILA MSc. In
ISTRI
M2 INFO/ULK
2025-2026
Organisation du module
Volume Horaire : 60h Présence
CMI: 30H La participation aux séances
de cours est obligatoire.
TD & TP: 10H
TPE: 5H
Evaluation Support de cours Contacts:
- Test mi-parcours : 30%
❑ Présentation Tél : +243974617007
- TPE : 30 %
PowerPoint
- Evaluation Finale : 40% bkabuatila10@[Link]
3 juillet 2024
2
Plan
Chapitre I : Rappel sur les réseaux informatiques
Chapitre II :Communication Réseau
chapitre III : Programmation réseau
3 juillet 2024 TX23 3
Bibliographie
1. Christian PANETTO, transmission & réseaux, 4ème édition, Ed. Dunod,
Paris, 2020.
2. Guy Pujolle, Wi-Fi par la pratique , 4é Ed. Eyrolles, Paris, 2022 ;
3. Guy Pujolle, Réseaux de mobiles et réseaux sans fil , Ed. Eyrolles,
Paris, 2014;
4. Guy Pujolle, Les Réseaux, 6é Ed. Eyrolles, Paris, 2018;
5. Jean-Pierre A. , Réseaux & Télécoms, 3é Ed. Dunod, Paris, 2017 ;
6. Arnaud SANGNIER, Programmation réseau, Notes de cours M1 RX, Université Paris-
Sud, 2021;
7. [Link]
3 juillet 2024 TX23 4
Objectifs du Module
L’objectif général de ce cours est d’initier les étudiants
à la conception et au développement des applications
distribuées capables de communiquer à travers un réseau
informatique, spécifiquement:
✓ Maîtriser l'interface de programmation Sockets ;
✓ Implémenter des Protocoles Applicatifs;
✓ Développer des applications utilisant les protocoles TCP
(orienté connexion) et UDP (mode non-connecté) dans des
langages comme C, Java ou Python.
3 juillet 2024 TX23 5
Introduction
Dans le paysage technologique actuel, la connectivité
est devenue le pilier central de toute infrastructure
numérique, qu'il s'agisse de services cloud,
d'applications mobiles ou de l'Internet des Objets.
La programmation réseau permet à des applications de
communiquer via des protocoles (TCP/UDP) et des
sockets, en utilisant le modèle client-serveur sur un
réseau local ou distant. Elle se concentre sur la
couche application pour échanger des données, gérer la
fiabilité (TCP) ou la vitesse (UDP).
3 juillet 2024 TX23 6
Introduction
Pour échanger des informations entre 2 entités communicantes
quelconques à travers un ou plusieurs réseaux :
◼ les deux correspondants doivent être mis en relation (notion
de
commutation)
◼ chaque correspondant doit être identifié et localisé de manière
unique
sur le réseau (notions d'adressage et de nommage)
◼ le réseau doit acheminer les blocs d'information vers le
destinataire (notion de routage)
◼ la taille des unités de données transférées doit être adaptée aux
capacités du réseau (notion de segmentation)
3 juillet 2024 TX23 7
Introduction
le trafic admis dans le réseau ne doit pas conduire à
◼
l'effondrement de celui-ci (notion de contrôle de congestion)
On distingue
◼ les nœuds supportant les applications utilisateurs (hôtes ou
"endsystems")
◼ les nœuds servant de relais à la communication entre deux
"endsystems" (nœuds de commutation, …)
3 juillet 2024 TX23 8
«
Chapitre I : Rappel sur
les réseaux
informatiques
Terminologies
Le terme RESEAU en anglais NETWORK définit
un ensemble d’entités (objets, personnes,
etc.) interconnectées les unes avec les
autres.
Un réseau permet de faire circuler des
éléments matériels ou immatériels entre
chacune de ces entités selon des règles bien
définies.
3 juillet 2024 TX23 10
Terminologies
Selon le type d’entités interconnectées, le terme
sera ainsi différent :
Réseau de transport : ensemble d’infrastructures et
de disposition permettant de transporter des
personnes et des biens entre plusieurs zones
géographiques.
Réseau téléphonique : ensemble d’infrastructures
permettant de faire circuler la voix entre
plusieurs postes téléphoniques.
3 juillet 2024 TX23 11
Terminologies
Réseau informatique : désigne un ensemble des
périphériques informatiques reliés au moyen
des lignes physiques (support de
transmission) en vue de communiquer,
s’échanger de données et partager les
ressources.
3 juillet 2024 TX23 12
Classification de réseaux informatiques
✓ selon la nature
a) Réseau filaire
Un réseau filaire (ou réseau câblé) est
une infrastructure informatique utilisant des supports
physiques, principalement des câbles à paire torsadée et
connecteurs RJ45 ou de la fibre optique, pour relier des
appareils entre eux et à Internet.
3 juillet 2024 TX23 13
Classification de réseaux informatiques
✓ selon la nature
b) Réseau sans fil
Un réseau sans fil (wireless) permet la connexion
d'appareils (ordinateurs, smartphones) sans câbles
physiques, utilisant des ondes radio, infrarouges,
lumière visible ou liaison satellitaires.
3 juillet 2024 TX23 14
Classification de réseaux informatiques
✓ selon la nature
b) Réseau sans fil
Un réseau sans fil (wireless) permet la connexion
d'appareils (ordinateurs, smartphones) sans câbles
physiques, utilisant des ondes radio, infrarouges,
lumière visible ou liaison satellitaires.
3 juillet 2024 TX23 15
Classification de réseaux informatiques
✓ selon la portée
- Piconet
- PAN
- LAN (CAN)
- RAN
- MAN
- WAN
3 juillet 2024 TX23 16
Classification de réseaux informatiques
✓ selon l’architecture
- Peer To Peer
- Client/Serveur
3 juillet 2024 TX23 17
Classification de réseaux informatiques
✓ selon l’ouverture
- Privé (Intranet, Extranet, etc)
- Public (Internet)
3 juillet 2024 TX23 18
Classification de réseaux informatiques
✓ selon la topologie
a) Physique
- Bus;
- Anneau;
- Etoile;
- Arbre;
- etc.
b) logique
- Ethernet;
- Token Ring;
- FDDi.
3 juillet 2024 TX23 19
Classification de réseaux informatiques
✓ selon le mode de liaison
- Point à Point;
- Point à Multipoint;
- Liaisons Hybrides.
3 juillet 2024 TX23 20
Classification de réseaux informatiques
✓ selon le mode de communication
- Simplex;
- Half-duplex;
- Full-duplex.
3 juillet 2024 TX23 21
Classification de réseaux informatiques
✓ selon le mode de transmission
- Série et parallèle;
- Synchrone et asynchrone.
3 juillet 2024 TX23 22
Classification de réseaux informatiques
✓ selon la commutation
- Paquet;
- Circuit;
- Message;
- Cellule.
3 juillet 2024 TX23 23
Classification de réseaux informatiques
✓ selon le modèle
- OSI;
- TCP/IP.
3 juillet 2024 TX23 24
Les tendances de Réseaux informatiques
Plusieurs nouvelles tendances de mise en
réseau qui touchent les organisations et les
consommateurs :
✓ Cloud computing
✓ IoT
✓ NGN
✓ IBN
✓ Li-Fi
3 juillet 2024 TX23 25
Les tendances de Réseaux informatiques
Cloud Computing
Présentation
Le cloud computing, en français
l'informatique en nuage (ou encore
l'infonuagique au Canada),
correspond à l’accès à des
services informatiques (serveurs,
stockage, mise en réseau,
logiciels) via Internet (le «
cloud » ou « nuage ») à partir
d’un fournisseur.
3 juillet 2024 TX23 26
Les tendances de Réseaux informatiques
Cloud Computing
Il existe quatre niveaux de cloud a savoir : -
Le cloud public : accessible par Internet;
- Le cloud d'entreprise ou privé : accessible
uniquement sur un réseau privé ;
- Le cloud intermédiaire ou hybride : qui est un mix entre le
cloud public et le cloud privé;
- Le Cloud Communautaire : une infrastructure partagée entre
plusieurs organisations ayant des préoccupations, objectifs,
ou exigences de sécurité communs .
3 juillet 2024 TX23 27
Les tendances de Réseaux informatiques
Cloud Computing
Il existe quatre niveaux de cloud a savoir :
- Le cloud public;
- Le cloud d'entreprise ou privé ;
- Le cloud intermédiaire ou hybride;
- Le Cloud Communautaire.
3 juillet 2024 TX23 28
Les tendances de Réseaux informatiques
Cloud Computing : services
- PaAs;
- IaAs;
- SaAs;
- MbaAs.
3 juillet 2024 TX23 29
Les tendances de Réseaux informatiques
Fog Computing
Le fog computing,
l'informatique géodistribuée,
l'informatique en brouillard,
consiste à exploiter des
applications et des infrastructures de
traitement et de stockage de
proximité, servant d'intermédiaire
entre des objets connectés et une
architecture informatique en nuage
classique.
3 juillet 2024 TX23 30
Les tendances de Réseaux informatiques
IoT
L’IoT (Internet of things) ou Internet
d’objets (IdO) est une technologie réseau
qui permet l'interconnexion entre
Internet et des objets, des
lieux et des environnements
physiques.
3 juillet 2024 TX23 31
Les tendances de Réseaux informatiques
IoT
Une infrastructure d’IOT repose sur 3 grands composants :
- un parc d’objets connectés fixes ou mobiles, répartis
géographiquement,
-un réseau telecom qui va permettre de connecter les objets en
transmettant des messages, ce réseau peut être filaire ou sans-
fil court (wifi, bluetooth,…) ou longue portée,
mobile (2G, 3G…) ou bas débit (LoraWan,
Sigfox,…)
-une application, développée le plus souvent en
technologie web, qui collecte les data du réseau d’objets pour
fournir une information agrégée et retraitée.
3 juillet 2024 TX23 32
Les tendances de Réseaux informatiques
IoT : Domaines d’application
- Santé;
- Transport;
- Domotique;
- Smart city;
- Etc.
3 juillet 2024 TX23 33
Les tendances de Réseaux informatiques
Technologie Li-Fi
Le Li-Fi (ou Light Fidelity) est une
technologie de communication sans fil appartenant
à la famille des VLC (Visible Light
Communication). Il s’agit d’un réseau optique
sans fil qui utilise des LED pour transmettre des
données. L’information est codée à travers la
fluctuation d’un signal lumineux émis par une LED.
3 juillet 2024 TX23 34
Les tendances de Réseaux informatiques
Technologie Li-Fi
Les informations communicantes sont très rapides
et ne sont pas détectées par l’œil humain
(la vitesse de transmission est de l’ordre du
MHz).Concrètement, le Li- Fi fonctionne grâce à
l’éclairage des ampoules LED qui disposent d’une
intensité lumineuse modulable.
Cette technologie offre un débit d’ordre 1Gbps.
3 juillet 2024 TX23 35
«
Chapitre II :Communication
Réseau
Introduction
La communication en réseau informatique repose sur
l'échange de données entre équipements (ETTD et ETCD)
connectés via des supports physiques (câbles) ou sans
fil, régie par des règles strictes nommées protocoles .
Elle utilise l'encapsulation de données en paquets
adressés, la structuration en couches (modèle OSI et
TCP/IP) et des équipements de routage pour acheminer
l'information.
3 juillet 2024 TX23 37
Introduction
o Il existe au moins deux grands modes de communication :
❖ Par paquet (datagram) : la poste en est un bon exemple :
- Dans ce mode on est pas connecté (encore que), on est
juste atteignable.
❖ En flux (stream) : la téléphonie en est un bon exemple.
- Dans ce mode on est connecté.
3 juillet 2024 TX23 38
Introduction
o Dans le mode paquet :
❖ Il n’existe pas d’ordre dans la délivrance des
paquets.
- un paquet posté en premier peut arriver en dernier.
❖ Il n’existe pas non plus de fiabilité.
- un paquet envoyé peut être perdu.
o Intérêt : souple et léger…
3 juillet 2024 TX23 39
Introduction
o Dans le mode paquet :
❖ Il n’existe pas d’ordre dans la délivrance des
paquets.
- un paquet posté en premier peut arriver en dernier.
❖ Il n’existe pas non plus de fiabilité.
- un paquet envoyé peut être perdu.
o Intérêt : souple et léger…
3 juillet 2024 TX23 40
Principes
L’objectif est d’envoyer une information et cette information
passe d'une application vers une autre.
Par exemple : Un navigateur envoie une requête vers un
serveur web
➢ Cette information peut–être perdue ou erronée
➢ L'ordre des messages peut être changé
➢ Allons nous gérer la perte des messages, le fait que des
'bits' d'information peuvent être changés ?
NON
3 juillet 2024 TX23 41
Principes : Un système de couches
1. Couche Physique
Rôle : Transmission des données sous forme binaire par
Fibre, câble,Onde radio, ...
2. Couche Liaison
Rôle : Gère la communication entre machines, adresse physique MAC
Protocoles : Ethernet, Wifi, ...
3. Couche Réseau
Rôle : Détermine le parcours des données et l'adressage
logique (adresse IP)
Protocoles : IPv4, IPv6, ...
3 juillet 2024 TX23 42
Principes : Un système de couches
4. Couche Transport
Rôle : Connexion bout à bout, contrôle de flux
Protocoles : TCP, UDP
5. Couche Session
Rôle : Communication points à point
Protocoles : TLS
3 juillet 2024 TX23 43
Principes : Un système de couches
6. Couche Présentation
Rôle : Chiffrement et déchiffrement des donnés
Protocoles : SSL, WEP
7. Couche Application
Rôle : Point d'accès aux services réseaux
Protocoles : SMTP, HTTP, SSH
3 juillet 2024 TX23 44
Principes : Un système de couches
Numéro Couche Rôle principal Protocoles & Standards
5 Applicat Interface utilisateur, accès aux HTTP, HTTPS, DNS, SMTP,
ion services réseau et formatage des FTP, SSH, DHCP
données.
4 Transpor Communication de bout en bout, TCP (fiable), UDP (rapide)
t gestion des flux et des erreurs.
3 Internet Adressage logique et routage des IPv4, IPv6, ICMP (Ping),
paquets à travers différents ARP, IPSec
réseaux.
2 Liaison Transmission locale des données Ethernet, Wi-Fi (802.11),
entre deux nœuds voisins (Adresses PPP, Switchs
MAC).
1 Physique Transmission brute des bits sur les RJ45, Fibre optique,
supports matériels (signaux Bluetooth, Hubs
électriques/optiques).
3 juillet 2024 TX23 45
Principes : Ce qui va nous intéresser
Développer des applications ou services
Ce que nous développerons se situera à la couche Application
● Nous utiliserons les protocoles de la couche Transport
Quels protocoles sous-jacents allons-nous utiliser :
TCP (modèle par flux)
● UDP (modèle par paquet)
Pour utiliser ces services, nécessité de savoir le nom ou
l'adresse des machines (adresse IPv4, IPv6)
3 juillet 2024 TX23 46
Principes : Les services en réseau
La couche transport nous fournit des services de communication
✓ Envoi de données
✓ Réception de données;
✓ Connexion à une machine.
Pour communiquer ces machines doivent se connaître
- Mécanisme de nommage des machines.
Comment identifier la machine
- elle est identifiée par une adresse.
Comment trouver une application ou un service sur une machine
- Chaque service est identifiée par un port.
3 juillet 2024 TX23 47
Principes : Les services en réseau
Adresse machine 1 Adresse machine 2
48
Adresse machine 3
Principes : Informations pour communiquer
❖ un couple (adresse , port) est un point de communication
- toute communication ne peut s’effectuer qu’entre au moins
deux points de communications
o l’émetteur
o le (ou les) receveur(s)
3 juillet 2024 TX23 49
Principes : Informations pour communiquer
Une machine peut-être identifiée par :
❖ un nom Internet (pas strictement nécessaire)
- Exemple : [Link]
❖ par une adresse Internet (toute machine connectée au
réseau en
possède une)
- En réalité il s’agit de l’adresse d’un dispositif réseau
sur une machine
Exemple : [Link]
3 juillet 2024 TX23 50
Principes : Informations pour communiquer
❖ D’autre part, sur une machine donnée plusieurs communications
peuvent prendre place simultanément
- toute communication nécessite l’utilisation d’un port
❖ Il existe essentiellement trois types de ports :
- les ports reconnus, de numéro compris entre 0 et 1023
- les ports réservés, de numéro compris entre 1024 et 49151
- les ports libres, de numéro compris entre 49152 et 65535
3 juillet 2024 TX23 51
Introduction aux sockets
Définitions :
o Un socket est un point de communication ouvert au niveau
des couches réseaux et permettant de faire passer des flux
o La communication est en point à point en mode client/serveur
o La communication est bidirectionnelle
o La connexion se fait en mode connecté (TCP) ou non connecté
(UDP)
3 juillet 2024 TX23 52
Introduction aux sockets
o Il existe deux protocoles utilisant les sockets en Java :
❑ TCP : Stream Socket
• Communication en mode connecté
• Les applications sont averties lors de la déconnexion
❑ UDP : Datagram Socket
• Communication en mode non connecté
• Plus rapide mais moins fiable que TCP
3 juillet 2024 TX23 53
Sockets TCP : principe
Fonctionnement en mode connecté :
o Données envoyées dans un « tuyau » et non pas par paquet : Flux de
données
o Fiable : la couche TCP assure que:
▪ Les données envoyées sont toutes reçues par la machine
destinataire
▪ Les données sont reçues dans l'ordre où elles ont été envoyées
3 juillet 2024 TX23 54
Sockets TCP : principe
3 juillet 2024 TX23 55
«
chapitre III : Programmation réseau
Sockets TCP en Java
Classes du package [Link] utilisées pour communication via
TCP
o InetAddress : codage des adresses IP
o Socket : socket mode connecté
o ServerSocket : socket d'attente de connexion du coté
server
3 juillet 2024 TX23 57
Sockets TCP en Java
Classe InetAddress
- Constructeurs : Pas de constructeurs, on passe par des
méthodes statiques pour créer un objet
- Méthodes:
✓ public static InetAddress getByName(String
host) throws UnknownHostException:
- Crée un objet InetAddress identifiant une machine dont le
nom est passé en paramètre
- L'exception est levée si le service de nom (DNS...) du
système ne trouve pas de machine du nom passé en paramètre
sur le réseau
3 juillet 2024 TX23 58
Sockets TCP en Java
Classe InetAddress
- Méthodes (Suite) :
✓ public static InetAddress getLocalHost() throws
UnknownHostException : Retourne l'adresse IP de la machine
sur laquelle tourne le programme, c'est-à-dire l'adresse IP
locale
✓ public String getHostName() : Retourne le nom de la machine
dont l'adresse est codée par l'objet InetAddress
3 juillet 2024 TX23 59
Sockets TCP en Java
Classe Socket
- Constructeurs :
✓ public Socket(InetAddress address, int port) throws
IOException :
- Crée une socket locale et la connecte à un port distant d'une
machine distante identifié par le couple address/port
✓ public Socket(String address, int port)
throws IOException,UnknownHostException:
o Idem mais avec nom de la machine au lieu de son adresse IP codée
o Lève l'exception UnknownHostException si le service de nom ne
parvient pas à identifier la machine.
3 juillet 2024 TX23 60
Sockets TCP en Java
Classe Socket
- Méthodes d'émission/réception de données:
• On récupère les flux d'entrée/sorties associés à le socket
- OutputStream getOutputStream()
- Retourne le flux de sortie permettant d'envoyer des données
via la Socket
- InputStream getInputStream()
- Retourne le flux d'entrée permettant de recevoir des données
via le Socket
- Fermeture d'un socket
- public close()
- Ferme le socket et rompt la connexion avec la machine distante
3 juillet 2024 TX23 61
Sockets TCP en Java
Classe Socket
- Méthodes « get »:
- int getPort()
- Renvoie le port distant avec lequel est connecté le socket
- InetAddress getAddress()
- Renvoie l'adresse IP de la machine distante
- int getLocalPort()
- Renvoie le port local sur lequel est liée le socket
3 juillet 2024 TX23 62
Sockets TCP en Java
Classe ServerSocket
- Socket d'attente de connexion, coté serveur uniquement
- Constructeurs
- public ServerSocket(int port) throws IOException
- Crée une socket d'écoute (d'attente de connexion de la part de
clients)
- La socket est liée au port dont le numéro est passé en
paramètre
- L'exception est levée notamment si ce port est déjà lié à une
socket
3 juillet 2024 TX23 63
Sockets TCP en Java
Classe ServerSocket
- Méthode :
- Socket accept() throws IOException
- Attente de connexion d'un client distant
- Quand connexion est faite, retourne une socket permettant de
communiquer avec le client : socket de service
3 juillet 2024 TX23 64
Sockets TCP en Java
Classe ServerSocket
- Méthode :
- Socket accept() throws IOException
- Attente de connexion d'un client distant
- Quand connexion est faite, retourne une socket permettant de
communiquer avec le client : socket de service
3 juillet 2024 TX23 65
Sockets TCP en Java : Exemple 1
package bk;
import [Link];
import [Link];
import [Link].*;
public class server {
public static void main(String[] args) throws Exception {
ServerSocket ss=new ServerSocket(1234);
[Link]("j'attends la connexion ...");
Socket s =[Link]();
[Link]("connexion client"+[Link]());
InputStream is=[Link]();
OutputStream os=[Link]();
[Link]("j'attend que le client envoi un nombre");
int nb=[Link]();
[Link]("j'au reçu un nombre");
int res=nb*3;
[Link]("j'envoi la réponse");
[Link](res);
3 juillet 2024 TX23 66
[Link](); }}
Sockets TCP en Java : Exemple 1
package bk_client;
import [Link];
import [Link];
import [Link];
import [Link].*;
public class client {
public static void main(String[] args) throws Exception {
[Link]("je me connecteur au serveur bk");
Socket socket = new Socket("localhost",1234);
InputStream is=[Link]();
OutputStream os = [Link]();
/* saisir un nombre au clavier
*
*/
3 juillet 2024 TX23 67
Sockets TCP en Java : Exemple 1
Scanner scanner =new Scanner([Link]);
[Link]("Saisir un nombre :");
int nb =[Link]();
[Link]("j'envoi le nombre ..."+nb+"au serveur");
[Link](nb);
[Link]("j'attend la réponse du serveur bk");
int rep=[Link]();
[Link]("la réponse du serveur bk est"+rep);
}
}
3 juillet 2024 TX23 68
Exemple 2 : Echange de données au format texte
Coté Serveur
package bk2;
import [Link];
import [Link];
import [Link].*;
public class s2 {
public static void main(String[] args) throws Exception {
// serveur positionne sa socket d'écoute sur le port local 7777
ServerSocket serverSocket = new ServerSocket(7777);
// se met en attente de connexion de la part d'un client distant
[Link]("j'attends la connexion ...");
Socket socket = [Link]();
// connexion acceptée : récupère les flux objets pour communiquer
3 juillet 2024 TX23 69
Exemple 2 : Echange de données au format texte
Coté Serveur
// avec le client qui vient de se connecter
ObjectOutputStream output = new ObjectOutputStream([Link]());
ObjectInputStream input = new ObjectInputStream([Link]());
// attente les données venant du client
[Link]("j'attend que le client envoi un nombre");
String chaine = (String)[Link]();
[Link](" reçu de client : "+chaine);
// affiche les coordonnées du client qui vient de se connecter
[Link](" ca vient de : "
+[Link]()+":"+[Link]());
// envoi d'une réponse au client [Link]("bien recu");
}
3 juillet 2024 TX23 70
Exemple 2 : Echange de données au format texte
Coté Client
package client2;
import [Link];
import [Link];
import [Link];
import [Link].*;
public class client2 {
public static void main(String[] args)throws Exception {
// adresse IP du serveur
InetAddress adr = [Link]("localhost");
// ouverture de connexion avec le serveur sur le port 7777
Socket socket = new Socket(adr, 7777);
// construction de flux objets à partir des flux de la socket
ObjectOutputStream output = new ObjectOutputStream([Link]());
ObjectInputStream input = new ObjectInputStream([Link]());
3 juillet 2024 TX23 71
Exemple 2 : Echange de données au format texte
Coté Client
// écriture d'une chaîne dans le flux de sortie : c'est-à-dire
// envoi de données au serveur
[Link]("Salut Serveur");
// attente de réception de données venant du serveur (avec le
// readObject) on sait qu'on attend une chaîne, on peut donc faire
//un cast directement
String chaine = (String)[Link]();
[Link](" reçu du serveur : "+chaine);
}
}
3 juillet 2024 TX23 72
TPE 1
Programmer un socket permettant au serveur
et client d’échanger de données au format
texte saisi au clavier.
30’
3 juillet 2024 TX23 73
Sockets TCP – gestion plusieurs clients
- On a vu comment faire communiquer des applications 1 à 1
via des sockets TCP.
- le serveur précédent accepte plusieurs connexions
simultanées, mais ne traite qu’un client à la fois, les
autres sont mis en attente.
- Donc nécessité de plusieurs processus ou threads
o Un processus en attente de connexion sur le port
d'écoute
o Nouvelle connexion : un nouveau processus est créé
pour gérer la communication avec le nouveau client
3 juillet 2024 TX23 74
Sockets TCP – gestion plusieurs clients
3 juillet 2024 TX23 75
Sockets TCP – gestion plusieurs clients
En programmation Java, un Thread (ou "fil d'exécution") est une
unité de traitement qui permet à votre programme de réaliser
plusieurs tâches simultanément
Pour créer et lancer un nouveau thread.
- Implémenter l'interface [Link] .
✓ Définir la méthode public void run() de cette
interface : Qui contient la séquence de code
qu'exécutera la thread.
✓ Pour lancer le thread :
• Instancier normalement la classe définie
• Créer une instance de la classe Thread en
passant cet objet en paramètre
• Lancer la méthode start() du thread instancié
3 juillet 2024 TX23 76
Sockets TCP – Exemple clients
import [Link].*;
import [Link].*;
import [Link];
public class ClientTCP {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 12345);
PrintWriter out = new PrintWriter([Link](), true);
BufferedReader in = new BufferedReader(new
InputStreamReader([Link]()));
Scanner sc = new Scanner([Link])) {
[Link]("Serveur dit : " + [Link]());
while (true) {
[Link]("Message : ");
String msg = [Link]();
[Link](msg);
if ("exit".equalsIgnoreCase(msg)) break;
[Link]([Link]());
}
} catch (IOException e) {
[Link]();
}
}
3 juillet 2024 TX23 77
}
Sockets TCP – Exemple Serveur
import [Link].*;
import [Link].*;
public class ServeurMultiThread {
public static void main(String[] args) {
int port = 12345;
try (ServerSocket serverSocket = new ServerSocket(port)) {
[Link]("Serveur démarré sur le port " + port);
while (true) {
// Attente d'une connexion client
Socket socketClient = [Link]();
[Link]("Nouveau client connecté : " +
[Link]());
// Création d'un nouveau thread dédié à ce client
Thread clientThread = new Thread(new
GestionnaireClient(socketClient));
[Link]();}
} catch (IOException e) {
[Link]();
}
3 juillet 2024 }} TX23 78
Sockets TCP – Exemple Serveur
// Classe qui définit le travail effectué pour chaque client
class GestionnaireClient implements Runnable {
private Socket socket;
public GestionnaireClient(Socket socket) {
[Link] = socket;
}
@Override
public void run() {
try (
BufferedReader in = new BufferedReader(new
InputStreamReader([Link]()));
PrintWriter out = new PrintWriter([Link](), true)
) {
[Link]("Bienvenue sur le serveur ! Tapez 'exit' pour
quitter.");
3 juillet 2024 TX23 79
Sockets TCP – Exemple Serveur
String message;
while ((message = [Link]()) != null) {
if ("exit".equalsIgnoreCase(message)) break;
[Link]("Reçu : " + message);
[Link]("Serveur a reçu : " + message);
}
} catch (IOException e) {
[Link]("Erreur client : " + [Link]());
} finally {
try { [Link](); } catch (IOException e) {
[Link](); }
}
}
}
3 juillet 2024 TX23 80
Sockets UDP
Mode datagramme
- Envois de paquets de données (datagrammes)
- Pas de connexion entre parties client et serveur
- Pas de fiabilité ou de gestion de la communication
• Un paquet peut ne pas arrivé (perdu par le réseau)
• Un paquet P2 envoyé après un paquet P1 peut arriver avant ce
paquet P1 (selon la gestion des routes dans le réseau)
Principe de communication :
- La partie serveur crée un socket et la lie à un port UDP particulier
- La partie client crée un socket pour accéder à la couche UDP et la
lie sur un port quelconque
3 juillet 2024 TX23 81
Sockets UDP
Principe de communication (Suite) :
- Le serveur se met en attente de réception de paquet sur son socket
- Le client envoie un paquet via sa socket en précisant l'adresse du
destinataire
• Couple @IP/port
• Destinataire = partie serveur
➢ @IP de la machine sur laquelle tourne la partie serveur et numéro
de port sur lequel est liée le socket de la partie serveur
- Le client envoie un paquet via sa socket en précisant l'adresse du
destinataire
- Il est reçu par le serveur, Si le client envoie un paquet avant que le
serveur ne soit prêt à recevoir : le paquet est perdu
3 juillet 2024 TX23 82
Sockets UDP en Java
- Java intègre nativement les fonctionnalités de communication
réseau au dessus de TCP-UDP/IP
• Package [Link]
- Classes utilisées pour communication via UDP
• InetAddress : codage des adresses IP
➢ Même classe que celle décrite dans la partie TCP et usage
identique
• DatagramSocket : socket mode non connecté (UDP)
• DatagramPacket : paquet de données envoyé via une socket sans
connexion (UDP)
3 juillet 2024 TX23 83
Sockets UDP en Java
Classe DatagramPacket
- Structure des données en mode datagramme
- Constructeurs :
✓ public DatagramPacket(byte[] buf, int length) :
- Création d'un paquet pour recevoir des données (sous forme d'un
tableau d'octets)
- Les données reçues seront placées dans buf
- length précise la taille max de données à lire
• Ne pas préciser une taille plus grande que celle du tableau
• En général, length = taille de buf
- Variante du constructeur : avec un offset pour ne pas commencer au
début du tableau
3 juillet 2024 TX23 84
Sockets UDP en Java
Classe DatagramPacket
- Constructeurs (suite) :
public DatagramPacket(byte[] buf, int length, InetAddress
address, int port) :
- Création d'un paquet pour envoyer des données (sous forme d'un
tableau d'octets)
- buf : contient les données à envoyer
- length : longueur des données à envoyer
• Ne pas préciser une taille supérieure à celle de buf
- address : adresse IP de la machine destinataire des données
- port : numéro de port distant (sur la machine destinataire) où
envoyer les données
3 juillet 2024 TX23 85
Sockets UDP en Java
Classe DatagramPacket
- Méthodes « get »:
InetAddress getAddress():
- Si paquet à envoyer : adresse de la machine destinataire
- Si paquet reçu : adresse de la machine qui a envoyé le paquet
int getPort():
- Si paquet à envoyer : port destinataire sur la machine distante
- Si paquet reçu : port utilisé par le programme distant pour
envoyer le paquet
3 juillet 2024 TX23 86
Sockets UDP en Java
Classe DatagramPacket
- Méthodes « get » (Suite) :
byte[] getData:
- Données contenues dans le paquet
int getLength():
- Si paquet à envoyer : longueur des données à envoyer
- Si paquet reçu : longueur des données reçues
3 juillet 2024 TX23 87
Sockets UDP en Java
Classe DatagramPacket
- Méthodes « set » :
void setAddress(InetAdress adr) :
- Positionne l'adresse IP de la machine destinataire du paquet
void setPort(int port) :
- Positionne le port destinataire du paquet pour la machine
distante
void setData(byte[] data):
- Positionne les données à envoyer
int setLength(int length) :
- Positionne la longueur des données à envoyer
3 juillet 2024 TX23 88
Sockets UDP en Java
- Les données circulent sur Internet sous forme de datagrammes (on
parle aussi de paquets ). Les datagrammes sont des données
encapsulées, c'est-à- dire des données auxquelles on a ajouté des
en-têtes correspondant à des informations sur leur transport
(telles que l'adresse IP de destination).
- La taille max des données transportées est de (216) ~ 64Ko.
Checksum optionnel en IP v4, obligatoire en IP v6 . Voici ce à
quoi ressemble un datagramme :
3 juillet 2024 TX23 89
Sockets UDP en Java
- Un datagramme UDP est rarement envoyé via plusieurs datagrammes
IP.
- En pratique : il est conseillé de ne pas dépasser 8 Ko car la
plupart des systèmes limitent à 8 Ko la taille des datagrammes
UDP.
- Pour être certain de ne pas perdre de données : 512 octets max
- Si datagramme UDP trop grand : les données sont tronquées
- Si tableau d'octets en réception est plus petit que les données
envoyées les données reçues sont généralement tronquées
3 juillet 2024 TX23 90
Sockets UDP en Java
Classe DatagramSocket
- Socket en mode datagramme
- Constructeurs :
public DatagramSocket() throws SocketException :
- Crée une nouvelle socket en la liant à un port quelconque libre
- Exception levée en cas de problème.
public DatagramSocket(int port) throws SocketException :
- Crée une nouvelle socket en la liant au port local précisé
par le paramètre port
- Exception levée en cas de problème : notamment quand le port
est déjà occupé
3 juillet 2024 TX23 91
Sockets UDP en Java
Classe DatagramSocket
- Méthodes d'émission/réception de paquet :
o public void send(DatagramPacket p) throws IOException :
- Envoie le paquet passé en paramètre. Le destinataire est
identifié par
le couple @IP/port précisé dans le paquet
- Exception levée en cas de problème d'entrée/sortie.
3 juillet 2024 TX23 92
Sockets UDP en Java
Classe DatagramSocket
- Méthodes d'émission/réception de paquet (Suite) :
public void receive(DatagramPacket p) throws IOException :
- Reçoit un paquet de données
- Bloquant tant qu'un paquet n'est pas reçu
- Quand paquet arrive, les attributs de p sont modifiés
- Les données reçues sont copiées dans le tableau passé en paramètre
lors de la création de p et sa longueur est positionnée avec la
taille des données reçues
- Les attributs d'@IP et de port de p contiennent l'@IP et le port de
la socket distante qui a émis le paquet
3 juillet 2024 TX23 93
Sockets UDP en Java
Classe DatagramSocket
- Autres méthodes :
public void close() :
- Ferme la socket et libère le port à laquelle elle était liée
public int getLocalPort() :
- Retourne le port local sur lequel est liée la socket
3 juillet 2024 TX23 94
Sockets UDP en Java
Classe DatagramSocket
- Réception de données : via méthode receive :
- Méthode bloquante sans contrainte de temps : peut rester en
attente indéfiniment si aucun paquet n'est jamais reçu
- Possibilité de préciser un délai maximum d'attente:
public void setSoTimeout(int timeout) throws SocketException:
- L'appel de la méthode receive sera bloquante pendant au plus
timeout millisecondes
3 juillet 2024 TX23 95
Sockets UDP en Java
- Une méthode receive se terminera alors de 2 façons :
➢ Elle retourne normalement si un paquet est reçu en moins
du temps positionné par l'appel de setSoTimeout
➢ L'exception SocketTimeoutException est levée pour indiquer
que le délai s'est écoulé avant qu'un paquet ne soit reçu
3 juillet 2024 TX23 96
Sockets UDP
o Avantages
• Simple à programmer (et à appréhender)
o Inconvénients
• Pas fiable
• Ne permet d'envoyer que des tableaux de byte
3 juillet 2024 TX23 97
Structure des données échangées
Format des données à transmettre
o Très limité a priori : tableaux de byte
• Et attention à la taille réservée : si le récepteur
réserve un tableau trop petit par rapport à celui
envoyé, une partie des données est perdue
o Doit donc pouvoir convertir
• Un objet quelconque en byte[] pour l'envoyer
• Un byte[] en un objet d'un certain type après
réception
o Solution
3 juillet 2024
• Utiliser les flux Java TX23
pour conversion automatique 98
Structure des données échangées
Format des données à transmettre
o Très limité a priori : tableaux de byte
• Et attention à la taille réservée : si le récepteur
réserve un tableau trop petit par rapport à celui
envoyé, une partie des données est perdue
o Doit donc pouvoir convertir
• Un objet quelconque en byte[] pour l'envoyer
• Un byte[] en un objet d'un certain type après
réception
o Solution
3 juillet 2024
• Utiliser les flux Java TX23
pour conversion automatique 99
Sockets UDP Java – exemple coté client
import [Link].*;
public class ClientUDP {
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket()) {
String msg = "Bonjour du client !";
byte[] buffer = [Link]();
// Adresse du serveur (localhost pour un test
local)
InetAddress adresse =
[Link]("localhost");
3 juillet 2024 TX23 100
Sockets UDP Java – exemple coté client
// Création et envoi du paquet
DatagramPacket packet = new
DatagramPacket(buffer, [Link], adresse, 7777);
[Link](packet);
[Link]("Message envoyé au
serveur.");
} catch (Exception e) {
[Link]();
}
}
3 juillet 2024
} TX23 101
Sockets UDP Java – exemple coté Serveur
import [Link].*;
public class ServeurUDP {
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket(7777)) {
// Écoute sur le port 7777
byte[] buffer = new byte[1024];
[Link]("Serveur en attente sur le port 7777...");
while (true) {
// Préparation du paquet de réception
DatagramPacket packet = new DatagramPacket(buffer, [Link]);
[Link](packet);
// Bloquant jusqu'à réception
String message = new String([Link](), 0, [Link]());
[Link]("Reçu de " + [Link]() + " : " +
message);
} } catch (Exception e) {
[Link]();
}
}}
3 juillet 2024 TX23 102
Merci !
103 ADMIN3231 2 mars 2026