0% ont trouvé ce document utile (0 vote)
131 vues16 pages

Cours #3 - Sockets

Le document traite des sockets en programmation réseau, expliquant leur rôle en tant que connecteurs pour la communication inter-processus à distance. Il couvre les sockets TCP et UDP, leurs caractéristiques, ainsi que des exemples de mise en œuvre d'une calculatrice client/serveur utilisant UDP. Enfin, il aborde le concept de pool de connexion pour optimiser l'utilisation des ressources réseau.

Transféré par

Abdou Zoubiri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
131 vues16 pages

Cours #3 - Sockets

Le document traite des sockets en programmation réseau, expliquant leur rôle en tant que connecteurs pour la communication inter-processus à distance. Il couvre les sockets TCP et UDP, leurs caractéristiques, ainsi que des exemples de mise en œuvre d'une calculatrice client/serveur utilisant UDP. Enfin, il aborde le concept de pool de connexion pour optimiser l'utilisation des ressources réseau.

Transféré par

Abdou Zoubiri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

SOCKETS

Samia BOULKRINAT
( Basé sur le cours de Assia HACHICHI )

Module
CAR

1/16
SOCKETS

Plan

I – Programmation réseau

Introduction et rappels sur les sockets

Sockets TCP

Pool de connexion
Module
CAR

2/16
I- Introduction et rappels sur les sockets

Socket : connecteur réseau

• Communication inter processus à distance

• Envoi et réception de messages via un réseau

• Socket = interface de programmation (API) avec les services du

système d’exploitation pour exploiter les services de communication

du système (local ou réseau)

• Une socket est un demi-point de connexion d’une application

Module
CAR

3/16
I- Introduction et rappels sur les sockets

Couche 7 Application Logiciels NFS

Couche 6 Présentation Représentation indépendante des données XDR

Couche 5 Session Etablit et maintien des sessions RPC

Couche 4 Transport Liaison entre applications de bout en bout, TCP, UDP


fragmentation, éventuellement vérification Multicast

Couche 3 Réseau Adressage et routage entre machines IP

Couche 2 Liaison Encodage pour l’envoi, détection d’erreurs,


synchronisation Ethernet
Couche 1 Physique Le support de transmission lui-même

Module
CAR

4/16
I- Introduction et rappels sur les sockets

Liaison par flux : Socket/ServerSocket (TCP)


• Connecté : protocole de prise de connexion (lent)
• =>communication uniquement point à point
• Sans perte : un message arrive au moins un fois
• Sans duplication : un message arrive au plus une fois
• Avec fragmentation : les messages sont coupés
• Ordre respecté
• Communication de type téléphone

Liaison par datagram : DatagramSocket/DatagramPacket (UDP)


• Non connecté : pas de protocole de connexion (plus rapide)
• Avec perte : l’émetteur n’est pas assuré de la délivrance
• Avec duplication : un message peut arriver plus d’une fois
• Sans fragmentation : les messages envoyés ne sont jamais
Module coupés
CAR • =>soit un message arrive entièrement, soit il n’arrive pas
• Ordre non respecté
• Communication de type courrier
5/16
I- Introduction et rappels sur les sockets

Fiabilité Ordre Connexion

Est-ce que les Est-ce que les messages Les échanges de


messages sont arrivent dans le même ordre données sont-ils
garantis sans erreur ? que celui de leur émission ? organisés en cx ?

TCP Oui Oui Oui

UDP Non Non Non

Module
CAR

6/16
I- Introduction et rappels sur les sockets

Une socket est identifiée par :


• Une adresse IP : une des adresses de la machine (ou toutes)

• Un port : attribué automatiquement ou choisi par le programme

• Adresse de Socket = Adresse IP + port

• Une socket communique avec une autre socket via à son


adresse

• Flux : une socket se connecte à une autre socket via son adresse
de socket
Module
CAR
• Datagram : une socket envoie/reçoit des données à/d’une autre
socket identifiée par son adresse de socket

7/16
TCP - Fonctionnement

• Serveur crée une socket et attend une demande de


connexion
• Client envoie une demande de connexion
• Serveur accepte connexion
Module
CAR • Dialogue client/serveur en mode flux
• Fermeture de connexion à l'initiative du client ou du serveur

8/16
TCP - Fonctionnement

Module
CAR

9/16
Sockets UDP - Exemple

 Soit à réaliser une calculatrice Windows Standard avec une


architecture Client / Serveur.
 La communication entre le Client et le Serveur se fait par socket
UDP.

Module
CAR

10/16
Projet UdpServeur – Classe serveur
using System;
using [Link];
using [Link];

namespace UdpServeur
{
class serveur
{
static void Main(string[] args)
{
int P = 8080;//port de connexion
IPEndPoint ip = null;

//Demarage su serveur
[Link]("Demarage du serveur...");
UdpClient serveur = new UdpClient(P);
bool loop = true;

while (loop)
{
//Attente de connexion
[Link]("Attente de connexion(s)...");
byte[] tmp = [Link](ref ip);
//Conversion des bytes en string (chaine de caractere)
string data = new [Link]().GetString(tmp);
//Dechifrage de la commande -->ip:port:command
Module string[] cmd = [Link](new char[] { ':' });
CAR
//adresse ip
string host = cmd[0];

//port de connexion
int port = [Link](cmd[1]);
11/16
Projet UdpServeur - Classe serveur (Suite)
//recuperation de nb1 du signe et de nb2
int nb1 = [Link](cmd[2]);
string signe = cmd[3];
int nb2 = [Link](cmd[4]);

int resultat = 0;
[Link]("Operation --> " + nb1 + " " + signe + " " + nb2);

//execution de la commande
switch (signe)
{
case "+": resultat = nb1 + nb2; break;
case "-": resultat = nb1 - nb2; break;
case "*": resultat = nb1 * nb2; break;
case "/": resultat = nb1 / nb2; break;
case "<>": resultat = 0; loop = false; break;
default: resultat = 0; break;
}//fin du switch
string reponse = nb1 + " " + signe + " " + nb2 + " = " + resultat;

//conversion du resultat en bytes


byte[] rep = [Link]([Link]());
[Link](rep, [Link], host, port);

}//fin du while
Module //arret du serveur
CAR [Link]("Arret du serveur...");
[Link]("Arret du serveur... *Entree* pour terminer.");
[Link]();
}
}
}
12/16
Projet Client – Classe UDPClient
using System;
using [Link];
using [Link];

namespace Client
{
class UDPClient
{
static void Main(string[] args)
{
[Link]("Initialisation du client...");
client proc = new client(8081, "[Link]", 8080);
string x, y, signe, command, resultat = "";
while (true)
{
[Link](" ");
[Link]("COMMANDE -> Pour quitter x = 0\n");
//entrer x
[Link]("x = "); x = [Link]();
//terminer si x = 0
if ([Link](x) == 0) break;
//entrer le signe
[Link]("signe : "); signe = [Link]();
//entrer y
[Link]("y = "); y = [Link]();
Module command = x + ":" + signe + ":" + y;
[Link](command, ref resultat);
CAR [Link]("RESULTAT -> " + resultat);
}
}
}
}
13/16
Projet Client – Classe client
using System;
using [Link];
using [Link];

namespace Client {
class client {
private int clientPort = -1;//port du client
private int serveurPort = -1;//port du serveur
private string serveurHost = null;//adresse du serveur
UdpClient Client = null;//le client
//constructeur
public client(int clientPort, string serveurHost, int serveurPort) {
[Link] = clientPort;
[Link] = serveurHost;
[Link] = serveurPort;
[Link] = new UdpClient(clientPort); }
public void Close() { [Link](); }
public bool Execute(string command, ref string resultat)
{ bool ok = true;
//commande a envoyer
string req = "[Link]:" + [Link] + ":" + command;
//conversion de la commande en byte
byte[] rq = [Link]([Link]());
//envoi de la commande
[Link](rq, [Link], [Link], [Link]);
//variable de reception du resultat
Module IPEndPoint ip = null;
CAR //reception
byte[] r = [Link](ref ip);
//conversion
resultat = [Link](r);
ok = ![Link](0);
return ok;
} } } 14/16
TCP - Suite

Asynchronisme :
• Read et Write synchrone
• Asynchronisme avec BeginRead/EndRead et BeginWrite/EndWrite

Autres protocoles de transport :


• Classe Socket
• Fonctionnement identique API C socket : bind/listen/connect
• Socket TCP/UDP/multicast IP, read/write sync/async

Module
CAR

15/16
Pool de connexion

Connexions réseau coûteuse

• En ressources occupées

• En temps mis pour ouvrir/fermer les connexions

But du pool : mutualiser les connexions entre deux machines.


Ex. : pool de connexion vers un SGBD

• Tous les programmes n'ont pas forcément besoin


de toutes les connexions en même temps
• Le pool peut restreindre ou adapter le # de connexions
simultanées

Module Si les programmes ont besoin de plusieurs connexions


CAR
=> Politique de gestion de ressources partagées
=> Problème "classique" : réservation, interblocage, …

16/16

Vous aimerez peut-être aussi