Vous êtes sur la page 1sur 25

Institut National des Télécommunication et des Technologies

d'Information et de la Communication INT-TIC d'Oran Algérie

Sockets TCP et UDP


Java
COURS : PROGRAMMATION RÉSEAU

R. HACHEMI
Introduction
Programmation réseau
Permettre à des programmes (applications) de communiquer à travers
un réseau
- d’une manière plus ou moins transparente : pas de
visibilité des systèmes intermédiaires.
- communication entre extrémités.
Introduction
Introduction
Adressage pour communication entre programmes
- Adresse IP (couche réseau)
- forme symbolique : google.com
- notation pointée : 172.217.19.142

- Numéro de port (couche transport)


- codés sur 16 bits : 0 à 65535
- <1024 : réservés 80=HTTP 21=FTP

- Ex. 172.217.19.142:80 Serveur web de google


Sockets
- Apparus dans les années 80 dans les systèmes UNIX (BSD : Berkeley
Software Distribution)
- Répandus aujourd’hui dans la plupart des systèmes d’exploitation
- Interface logicielle avec les services du système d’exploitation
- « Prise » associée à un port
- « Point d’accès » aux couches inférieures du réseau
- Emission et Réception de données via le port
Sockets
Sockets
Socket vs Modèle Client / Serveur
- Communication via TCP/UDP : deux rôles distincts, client et serveur
- Possibilité de jouer les deux rôles en même temps
- La communication est initiée par un client
- Le serveur est à l’écoute d’une communication éventuelle d’un client
via une socket associée à un port précis : le port d’écoute
Socket TCP
- Mode connecté
- Le serveur associe une socket d'écoute sur un certain port bien précis et appelle
un service d'attente de connexion de la part d'un client
- Le client appelle un service pour ouvrir une connexion avec le serveur et
récupère une socket (associée à un port quelconque par le système)
- Du coté du serveur, le service d'attente de connexion retourne une socket de
service (associée à un port quelconque)
- C'est la socket qui permet de dialoguer avec ce client
- Le client et le serveur communiquent en envoyant et recevant des données via
leur socket
Socket TCP en Java
- Communication de haut niveau
- Utilisant les flux Java
- Envoi de n'importe quel type de données via les sockets
- Chaque socket possède un flux d'entrée et un flux de sortie
Socket TCP en Java
Package java.net
Classe InetAddress : codage des adresses IP
Classe Socket : socket en mode connecté
Classe ServerSocket : socket d'attente de connexion du coté
serveur
Socket TCP en Java – Classe Socket
Création d’une socket TCP

- Constructeur créant une socket connectée à une machine distante identifiée par address sur le port
port.

public Socket(InetAddress address, int port) throws IOException

- Constructeur similaire au précédent, utilisant le nom de la machine au lieu de son adresse IP codée.

public Socket(String address, int port) throws IOException,


UnknownHostException

Lève une exception UnknownHostException si le service de nom ne parvient pas à identifier la


machine.

- Autre constructeur pour préciser également un port local sur lequel sera liée la socket créée.
Socket TCP en Java – Classe Socket
Emission vs Réception de données

- Récupérer les flux d’entrée / sortie associés à la 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 la socket


Socket TCP en Java – Classe Socket
Fermeture de la Socket

public close()

Ferme la socket et la connexion avec la machine distante


Socket TCP en Java – Classe Socket
Accesseurs

int getPort() Renvoie le port distant

int getLocalPort() Renvoie le port local

InetAddress getAddress() Renvoie l’adresse locale de la machine distante

void setSoTimeout(int timeout) throws SocketException


Définition du temps d’attente maximal sur le flux d’entrée
Levée d’une exception si le temps est dépassé
Par défaut le temps d’attente est infini
Socket TCP en Java – Classe ServerSocket
Création d’une socket d’attente de connexion coté serveur

- Constructeur créant une socket d’écoute sur le port port.

public ServerSocket(int port) throws IOException

Si le port est déjà utilisé une exception est levée.

- Récupération d’une socket de service

Socket accept(int port) throws IOException

Méthode bloquante d’attente de connexion

Quand une connexion est faite, la méthode renvoie une socket permettant de communiquer avec le
client
Socket UDP
Mode Non Connecté – Communication par 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 arriver (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)
Socket UDP
Principe de Communication

- La partie serveur crée une socket et la lie à un port UDP particulier

- La partie client crée une socket pour accéder à la couche UDP et la lie sur un port quelconque

- Le serveur se met en attente de réception de paquet sur sa socket

- Le client envoie un paquet via sa socket en précisant l'adresse du destinataire (adresse IP et numéro de port)

- Le paquet est reçu par le serveur (sauf problème réseau)

- Si le client envoie un paquet avant que le serveur ne soit prêt à recevoir : le paquet est perdu

- Emission non bloquante mais Réception bloquante


Socket UDP en Java
Package java.net
Classe InetAddress : codage des adresses IP
Classe DatagramSocket : socket en mode non-connecté (UDP)
Classe DatagramPacket : paquet de donnée envoyé via une
socket UDP
Socket UDP en Java – Classe DatagramPacket
Structure de Données d’un Datagramme UDP

- Constructeur créant un paquet pour recevoir des données (sous forme d’un tableau d’octets)

public DatagramPacket(byte[] buf, int length)

- Les données reçus sont placées dans buf

- La taille maximale length des données à lire est en général égale à la taille de buf

- Autre variante : avec un offset pour ne pas commencer du début du tableau


Socket UDP en Java – Classe DatagramPacket
Structure de Données d’un Datagramme UDP

- Constructeur créant un paquet pour envoyer des données (sous forme d’un tableau d’octets)

public DatagramPacket(byte[] buf, int length , InetAddress address, int port)

- Les données à envoyer sont contenues dans buf

- La taille des données à envoyer : length

- L’adresse IP de la machine destinataire des données : address

- Le numéro de port distant : port


Socket UDP en Java – Classe DatagramPacket
Accesseurs

InetAddress getAddress() Renvoie l’adresse de la machine destinataire (si le paquet est à envoyer)
Renvoie l’adresse de la machine émettrice (si le paquet est reçu)

int getPort() Renvoie le port de la machine destinataire (si le paquet est à envoyer)
Renvoie le port de la machine émettrice (si le paquet est reçu)

byte[] getData() Renvoie les données contenues dans le pacquet

int getLength() Renvoie la longueur des données à envoyer (si le paquet est à envoyer)
Renvoie la longueur des données reçues (si le paquet est reçu)
Socket UDP en Java – Classe DatagramPacket
Accesseurs

void setAddress(InetAddress) Définit l’adresse de la machine destinataire du paquet

void setPort(int port) Définit le port destinataire de la machine distante

void setData(byte[] data) Définit les données à envoyer

int setLength(int length) Définit la longueur des données à envoyer


Socket UDP en Java – Classe DatagramSocket

- Constructeur créant une socket datagramme liée à un port libre

public DatagramSocket() throws SocketException

- Constructeur créant une socket datagramme liée à un certain port

public DatagramSocket(int port) throws SocketException


Socket UDP en Java – Classe DatagramSocket
Emission / Réception de paquets Datagrammes

- Envoi d’un paquet (passé en paramètre). L’adresse et le port du destinataire sont contenu dans le paquet.

public void send (DatagramPacket p) throws IOException

- Réception d’un paquet.

public void receive (DatagramPacket p) throws IOException

- Opération bloquante jusqu’à arrivée d’un paquet.

- Quand un paquet arrive, le paramètre p contient les informations du paquet reçu (adresse, port ,
données, longueur)
Socket UDP en Java – Classe DatagramSocket
Autres Méthodes

void close() Ferme la socket et libère le port

void getLocalPort() Retourne le port local

void connect(InetAddress address, int port) throws IllegalArgumentException

Restreindre la communication avec un seul destinataire (créer un canal)

void setSoTimeout(int timeout) throws SocketException


La méthode receive sera bloquante pendant au plus timeout
millisecondes
Exception levée si le temps est écoulé

Vous aimerez peut-être aussi