2023-2024 Programmation Réseaux
2023-2024 Programmation Réseaux
2023-2024 Programmation Réseaux
2023/2024
Dr SALEK RIADI
[email protected]
Socket
Principe de base
Type de sockets
Socket TCP vers Socket UDP
Plan [2/2]
Interface de programmation réseaux
JAVA
Le package java.net.*
Socket UDP
Communication réseau avec le protocole UDP
Architecture Client-Serveur en mode non connecté
Serveur UDP
Client UDP
Socket TCP
Architecture Client-Serveur en mode connecté
Serveur TCP Mono Client
Client TCP
Gestion de plusieurs clients
Serveur TCP Multi Client
Références
La couche d’accès réseau a pour rôle de transmettre les données sur le
média physique utilisé.
En fonction du type de réseau, des protocoles différents peuvent être utilisés
à ce niveau.
Introduction TCP/IP : Couche internet
La couche internet permet d'envoyer les données sous forme de paquets vers
leurs destinations à travers une série de réseaux physiques différents.
L'envoi de ces paquets est réalisé en fonction des adresses définies par le
protocole IP (Internet Protocol):
IPv4 Adresses codées sur 4 octets en décimal, soit 4,3 Milliard de
possibilités. Exemple: 105.158.9.22
IPv6 Adresses codées sur 16 octets en hexadécimal, soit 1 adresse par
millimètre carré… Exemple: fedc:6482:cafe:ba05:a200:e8ff:fe65:df9a
Introduction TCP/IP: Couche Transport
Les ports codées sur 16 bits en décimal, soit 216 – 1, soit 65535 port disponibles sur un
ordinateur. Ils sont divisés de la façon suivante :
0 à 1023 pour les « well known ports »;
1024 à 49151 pour les « registred ports »;
49152 à 65535 pour les « private and/or dynamic ports ».
Introduction TCP/IP: Couche Application (3/3)
Protocole / couche
Port réservé Protocole / couche transport
application
echo 7 TCP/UDP
discard 9 TCP/UDP
daytime 13 TCP/UDP
FTP data 20 TCP
FTP 21 TCP
SSH 22 TCP
telnet 23 TCP
smtp 25 TCP
time 37 TCP/UDP
whois 43 TCP
finger 79 TCP
HTTP 80 TCP
POP3 110 TCP
Architectures
distribuées L’architecture Client/Server [1/4]
Un programme serveur
Tourne en permanence, attendant des requêtes
Peut répondre à plusieurs clients en même temps
Nécessite
Une machine robuste et rapide, qui fonctionne 24h/24: Alimentation
redondante, téchnologie RAID…
La présence d’administrateurs systèms et réseau pour gérer les serveurs
windows server administrator
linux server administrator
Architectures L’architecture Client/Server [4/4]
distribuées Le programme Client
Un programme client
s'exécute sur un PC, un smartphone, une tablette ou sur un autre appareil
connecté.
utilise le service offert par un serveur.
Le client envoie une requête et reçoit la réponse.
Requête : message transmis par un client à un serveur décrivant l’opération
à exécuter pour le compte du client.
Réponse : message transmis par un serveur à un client suite à l’exécution
une opération, contenant le résultat de l’opération.
Exemples
Client FTP
Client telnet
Client mail
Navigateur
Architectures
distribuées L’architecture Peer-to-Peer [1/2]
Communication
Serveur Port Port Client
Sockets Principe de base [2/2]
Communication
Serveur Port Port Client
Sockets Type de sockets
Il est important de savoir ce que peuvent faire les sockets TCP et UDP, et ce
qu'elles ne peuvent pas faire, de manière à pouvoir choisir le type qui correspond
aux besoins de votre application. :
Le protocole TCP est dit connecté et sécurisé, car il s’assure que toutes les
données arrivent à destination et qu’elles soient reconstituées en prenant en
compte leur ordre d’émission.
Le mauvais côté de tout ceci est que TCP est beaucoup plus lent qu'UDP mais,
comme vous le savez, UDP n'est pas un protocole sûr.
Le mode non connecté utilise le protocole UDP de l'Internet.
Interface de
Le package java.net
Programmation Réseaux
Object
ServerSocket
DatagramSocket
DatagramPacket
HttpSendSocket WrappedSocket
Communication réseau avec le protocole
Sockets UDP
UDP
Envoi d’un
Attente d'un
message
message
Envoi d'une
réponse
Attente d'un
message
Architecture Client-Serveur en mode non connecté
Sockets UDP [2/2]
Message
Serveur Port Client
Réponse
Serveur Port Client
Sockets UDP Serveur UDP
import java.net.*;
class UDPServer{
public static void main(String[] args) throws Exception {
int port = Integer.parseInt(args[0]);
byte buffer[] = new byte[1024];
DatagramSocket socket = new DatagramSocket(port);
while(true) {
DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
socket.receive(dp);
String str = new String(dp.getData(), 0, dp.getLength());
System.out.println("@IP : " + dp.getAddress() + "Port : " + dp.getPort()
+ " : " + str);
socket.send(dp);
}
}
}
Sockets UDP Client UDP
import java.net.*;
public class UDPClient{
public static void main(String args[]) throws Exception {
InetAddress serveur = InetAddress.getByName(args[0]);
int length = args[2].length();
byte buffer[] = args[2].getBytes();
int port = Integer.parseInt(args[1]);
DatagramPacket dataSent = new DatagramPacket(buffer,length,serveur,port);
DatagramSocket socket = new DatagramSocket();
socket.send(dataSent);
DatagramPacket dataRecieved = new DatagramPacket(new
byte[length],length);
socket.receive(dataRecieved);
System.out.println("Data recieved : " + new String(dataRecieved.getData()));
System.out.println("From : " + dataRecieved.getAddress() + ":" +
dataRecieved.getPort());
socket.close();
}
}
Sockets UDP TD2 - Exercice 2 [1/3]
import java.io.*;
import java.net.*;
class PrimeServer {
public static void main(String[] args) throws Exception {
int port = Integer.parseInt(args[0]);
DatagramSocket socket = new DatagramSocket(port);
int n;
Boolean b;
while (true) {
DatagramPacket dr = new DatagramPacket(new byte[32], 32);
socket.receive(dr);
String str = new String(dr.getData(), 0, dr.getLength());
System.out.println( str);
n = Integer.parseInt(str);
b = true;
Sockets UDP TD2 - Exercice 2 [2/3]
Messages de A vers B
Peer A Port Port Peer B
Messages de B vers A
TD2 – Exercice 4
Sockets UDP Peer-to-Peer Solution: Peer A [1/2]
class PeerA {
public static void main(String args[]) throws Exception {
InetAddress peerB = InetAddress.getByName(args[0]);
int length;
byte buffer[];
DatagramSocket socket = new DatagramSocket(10000);
DatagramPacket dataSent, dataRecieved;
Scanner sc = new Scanner(System.in);
String str;
TD2 – Exercice 4
Sockets UDP Peer-to-Peer Solution: Peer A [2/2]
while (true) {
buffer = new byte[1024];
dataRecieved = new DatagramPacket(buffer, buffer.length);
socket.receive(dataRecieved);
str = new String(dataRecieved.getData(), 0,
dataRecieved.getLength());
System.out.println("Peer B : " + str);
str = sc.nextLine();
length = str.length();
buffer = str.getBytes();
dataSent = new DatagramPacket(buffer, length,
peerB,dataRecieved.getPort());
socket.send(dataSent);
}
}
}
TD2 – Exercice 4
Sockets UDP Peer-to-Peer Solution: Peer B [1/2]
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class PeerB {
public static void main(String args[]) throws Exception {
InetAddress peerA = InetAddress.getByName(args[0]);
int portA = Integer.parseInt(args[1]);
int length;
byte buffer[];
DatagramSocket socket = new DatagramSocket(20000);
DatagramPacket dataSent, dataRecieved;
Scanner sc = new Scanner(System.in);
String str;
TD2 – Exercice 4
Sockets UDP Peer-to-Peer Solution: Peer B [2/2]
while (true) {
str = sc.nextLine();
length = str.length();
buffer = str.getBytes();
dataSent = new DatagramPacket(buffer, length, peerA, portA);
socket.send(dataSent);
buffer = new byte[1024];
dataRecieved = new DatagramPacket(buffer, buffer.length);
socket.receive(dataRecieved);
str = new String(dataRecieved.getData(), 0,
dataRecieved.getLength());
System.out.println("Peer A : " + str);
}
}
}
TD2 – Exercice 4
Sockets UDP Client/Server Solution
Port
Serveur
Port
Port Client 1
Etape 1: Message de Client 1 vers Server
Sockets UDP TD2 – Exercice 3
Demande de connexion
Serveur Port Client
Accepte
Serveur Port Client
Connexion
Serveur Port Port Client
Sockets TCP Serveur TCP Mono Client [2/2]
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception {
int port = Integer.parseInt(argv[0]);
ServerSocket ss = new ServerSocket(port);
String str;
while (true) {
Socket connectionSocket = ss.accept();
InputStreamReader isr = new InputStreamReader(connectionSocket.getInputStream());
BufferedReader br = new BufferedReader(isr);
PrintWriter pw = new PrintWriter(connectionSocket.getOutputStream() , true);
str = br.readLine();
System.out.println("Received: " + str);
str = str.toUpperCase();
pw.println(str);
}
}
}
Sockets TCP Client TCP
import java.io.*;
import java.net.*;
import java.util.Scanner;
class TCPClient {
public static void main(String argv[]) throws Exception {
InetAddress serveur = InetAddress.getByName(argv[0]);
int port = Integer.parseInt(argv[1]);
Socket clientSocket = new Socket(serveur, port);
Scanner sc = new Scanner(System.in);
BufferedReader br = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
PrintWriter pw = new PrintWriter(clientSocket.getOutputStream() , true);
String str;
System.out.println("Write your message here :");
str = sc.nextLine();
pw.println(str);
str = br.readLine();
System.out.println("Server response : " + str);
clientSocket.close();
}
}
Sockets TCP Gestion de plusieurs clients [1/4]
Demande de connexion
Serveur Port Client 1
Sockets TCP Serveur TCP Multi-Clients [2/8]
Accepte
Serveur Port Client 1
Sockets TCP Serveur TCP Multi-Clients [3/8]
Serveur Port
Port
connexion
Port Client 1
Sockets TCP Serveur TCP Multi-Clients [4/8]
Demande de connexion
Serveur Port Client 2
Port
Connexion
Port Client 1
Sockets TCP Serveur TCP Multi-Clients [5/8]
Accepte
Serveur Port Client 2
Port
Connexion
Port Client 1
Sockets TCP Serveur TCP Multi-Clients [6/8]
Connexion
Port Client 2
Port
Serveur Port
Port
Port Client 1
Connexion
Sockets TCP Serveur TCP Multi Client [7/8]
/* ServeurMulti.java*/
/* Serveur multi clients */
import java.io.*;
import java.net.*;