SlideShare une entreprise Scribd logo
Université de Lille1

Les sockets java
N. Melab
melab@lifl.fr
Sockets

DESS-ISIDIS

Plan
n
n
n

Le modèle
Sockets java
Sockets C-UNIX BSD 4.X
Le modèle
n

n
n
n

Sockets : interface (point de communication)
client/serveur utilisée à l’origine dans le monde
UNIX et TCP/IP
Etendue aux PCs (Winsock) et mainframes
Primitives pour le support de communications
reposant sur les protocoles (TCP/IP, UDP/IP)
Les applications client/serveur ne voient les
couches de communication qu’à travers l’API
socket (abstraction)

Sockets

DESS-ISIDIS

Sockets/OSI
Application cliente

Protocole Applicatif

Application serveur

API Socket

UDP

API Socket

TCP

UDP

TCP

IP

IP

Physique

Physique
Rôle des sockets
n
n
n
n
n
n

Connexion à une machine distante
Envoi/Réception de données
Fermeture d’une connexion
Attachement à un port
Acceptation d’une demande de connexion à un
port local
Attente de demandes de connexion

Sockets

DESS-ISIDIS

Notion de port
n

Connexion réseau
* Adresse

internet de la machine
* Numéro du port
n

Pourquoi les ports ?
* Sur

une même machine, plusieurs services sont
accessibles simultanément (web, email, etc.)
* Points d’accès : ports logiques (65535)
* Rien à avoir avec les ports physiques (série et
parallèle)
Désignation des ports
n
n

n

Port : numéro allant de 1 à 65535
Les ports 1 à 1023 sont réservés aux services
courants : finger, ftp, http (80), SMTP (25),
etc.
Fichier d’assignation de ports : /etc/services

Sockets

DESS-ISIDIS

Adresse internet
n

Connexion réseau
* Adresse

internet de la machine
* Numéro : 193.49.192.193
n

Désignation par des noms symboliques
* Association

de noms symboliques aux adresses
numériques
* Domain Name System (ou DNS)
* Exemple : lil.univ-littoral.fr : 193.49.192.193
Sockets java

Sockets

DESS-ISIDIS

Gestion des ports (adresses) en Java
n

Classe InetAdress
*
*

Dans java.net
Champs
ó hostName
ó address

(exemple : lil.univ-littoral.fr)

(32 bits, exemple : 193.49.192.193)

Pas de constructeur
* 3 méthodes statiques
*

ó public

static InetAddress InetAddress .getByName(String hote)
static InetAddress[] InetAddress .getAllByName(String hote)
ó public static InetAddress InetAddress .getLocalHost()
ó public

n

Classes Socket, SocketServer et SocketImpl
* getInetAddress()
Gestion des sockets
n

Taxinomie
* Sockets
ó Point

à point : Socket, SocketServer, SocketImlp

* Sockets
ó Point

TCP
UDP

à point : DatagramSocket
MultiCastSocket

ó Multi-point :

* Dans

java.net

Sockets

DESS-ISIDIS

Sockets TCP
n

Classe Socket
ò
ò
ò

n

Connexion à une machine distante
Envoi/Réception de données
Fermeture d’une connexion

Classe SocketServer
ò
ò
ò

Attachement à un port
Acceptation d’une demande de connexion à un port
local
Attente de demandes de connexion
Classe Socket (1)
n

Constructeurs
ò
ò
ò
ò
ò
ò

public Socket(String hote, int port) throws
UnknownHostException, IOException
public Socket(InetAddress hote, int port) throws IOException
public Socket(String hote, int port, InetAddress interface, int
portLocal) throws IOException
public Socket(InetAddress hote, int port, InetAddress
interface, int portLocal) throws IOException
protected Socket()
protected Socket(SocketImpl impl)

Sockets

DESS-ISIDIS

Classe Socket (2)
n

Information
ò

public InetAddress getInetAddress()
public int getPort()
public int getLocalPort()

ò

public InetAddress getLocalAddress()

ò
ò

n

Envoi/Réception de données
ò
ò

n

public InputStream getInputStream() throws IOException
public OutputStream getOutputStream() throws IOException

Fermeture
ò

public synchronized void close() throws IOException
Classe Socket (3)
n

Options
ò

TCP_NODELAY
ó Données expédiées aussitôt que possible quelque soit leur taille
ó

ò

Méthodes setTcpNoDelay (boolean valid) et setTcpNoDelay()

SO_LINGER
ó Attente ou non avant de fermer une socket au cas où il reste des
données à envoyer
ó Méthodes

setSoLinger (boolean valid, int secondes) et
getSoLinger()

Sockets

DESS-ISIDIS

Classe Socket (4)
ò

SO_TIMEOUT
ó Déclenchement

d’exception si le délai spécifié est dépassé lors
de la réception de données
ó Méthodes setSoTimeout (int ms) et getSoTimeout()

n

Exceptions
ò

SocketException
ó BindException : port déjà utilisé ou le programme n’a pas le

droit de l’utiliser

ó ConnectException : hôte occupé ou aucun processus n’écoute sur

le port
ó NoRouteToHostException : dépassement de temps
Exercices
Ecrire un programme qui :

n

ò
ò

se connecte au service daytime d’internet (port
numéro 13)
affiche la date et l’heure

Ecrire un programme qui implémente le service
echo (port numéro 7) - Utiliser les options des
sockets
Implémenter le protocole finger (port numéro 79)

n

n

Sockets

DESS-ISIDIS

Classe ServerSocket (1)
n
n

Rôle : standardiste
Gestion d’une connexion
ò
ò
ò
ò
ò

Création d’un nouvel objet ServerSocket affecté à un
port : constructeur ServerSocket
Attente de connextion : accept()
Echange d’informations : getInputStream() et
getOutputStream()
Clôture de la connexion par le client ou le serveur :
close()
Nouvelle attente
Classe ServerSocket (2)
n

Prise en compte des connexions
ò
ò

Un thread par connexion
Dans ftp, un processus par connexion
ó

n

Limite : 400 connexions

Gestion des demandes de connexion
ò

File d’attente gérée par le système
ó

Taille = 50 par défaut mais peut être modifiée

Sockets

DESS-ISIDIS

Classe ServerSocket (3)
n

Constructeurs
ò
ò
ò
ò

n

public ServerSocket(int port) throws IOException,
BindException
public ServerSocket(int port, int taillefile) throws IOException,
BindException
public ServerSocket(int port, int taillefile, InetAddress
adresseAttache) throws IOException
protected ServerSocket()

Prise en compte et clôture d’une connexion
ò
ò

public Socket accept() throws IOException
public void close() throws IOException
Classe ServerSocket (4)
n

Information
ò
ò

n

public InetAddress getInetAddress()
public int getLocalPort()

Options
ò

SO_TIMEOUT
ó Doit être initialisé avant accept
ó Méthodes

Sockets

setSoTimeout (int ms) et getSoTimeout()

DESS-ISIDIS

Exercice
n

Programmer le service daytime d’internet
ò
ò

Ne pas utiliser le port numéro 13 sauf si vous avez les
droits super-utilisateur
Utiliser un numéro de port supérieur à 1024
Protocoles TCP et UDP
n

TCP
*
*
*
*

n

Garantie d’arrivée dans l’ordre de paquets de données
Fiabilité de transmission
Lenteur des transmissions (http par exemple)
Vu comme un «service téléphonique»

UDP
*
*
*
*
*

Arrivée dans le bon ordre non garantie
Non fiabilité des transmissions
Rapidité des transmissions
Applications audio/vidéo
Vu comme un «service postal»

Sockets UDP point-à-point
n
n

Pas de différence de classe entre le client et le
serveur
Deux classes Java dans java.net
* DatagramPacket
* DatagramSocket

n

DatagramPacket
* Assemblage des données en partance en datagrammes
* Extraction des données des datagrammes reçus

n

DatagramSocket
* Envoi et réception des datagrammes UDP (objets
DatagramPacket)
Classe DatagramPacket (1)
n

Constructeurs
* DatagramPacket destiné à la réception de données
( public

DatagramPacket(byte tampon[], int longueur)
( Réception des données dans tampon
( Longueur maximale : 65 507 octets
( Java

remplit les champs de DatagramPacket : adresse IP de la
machine distante et le numéro de port concerné

* DatagramPacket destiné à l’envoi de données
( public

DatagramPacket(byte tampon[], int longueur,
InetAddress ia, int port)
( Conseil : utiliser getBytes() de la classe String pour
transformer des chaînes de caractères en tableaux d’octets

Classe DatagramPacket (2)
Structure d’un datagramme
En-tête IP
4 octets

4 octets

2 octets

En-tête UDP
2 octets

2 octets

Charge utile
2 octets

...

Contrôle pour fiabilité
Longueur
Port destinataire
Port expéditeur
Hôte destinataire
Hôte expéditeur
Classe DatagramPacket (3)

n

Information
* public int getPort()
( Numéro

de port de provenance si datagramme reçu
de port de destination si datagramme créé
localement

( Numéro

* public InetAddress getAddress()
( Adresse

du hôte distant si datagramme reçu
( Adresse du hôte local si datagramme créé localement

Classe DatagramPacket (4)
n

Information (suite)
* public byte[] getData()
( Tableau

d’octets du datagramme
( Caractères ASCII : String s=new String(dp.getData(), 0, 0,
dp.getLength());
( Caractères non ASCII : ByteArrayInputStream b=new
ByteArrayInputStream(dp.getData(), 0, 0, dp.getLength());

* public InetAddress getLength()
( Taille

en octets du datagramme
Classe DatagramSocket (1)
n

Constructeurs
* DatagramSocket utilisé par le client
( public DatagramSocket() throws SocketException
( Ports de destination et de partance spécifiés dans le
datagramme (objet DatagramPacket)
* DatagramSocket utilisé par le serveur
( public DatagramSocket(int port) throws SocketException
( Remarque : les ports TCP et leurs équivalents UDP ne sont pas
liés i.e. un même numéro de port peut être associé à la fois à
une socket TCP et une socket UDP sans provoquer aucun
problème de conflit
* DatagramSocket utilisé par le serveur multi -adresse
( public DatagramSocket(int port, InetAdress ia) throws
SocketException

Classe DatagramSocket (2)
n

Emission/Réception de datagrammes
* public void send(DatagramPacket dp) throws IOException
* public void receive(DatagramPacket dp) throws IOException

n

Information
* public int getLocalPort()
*Numéro de port (anonyme et assigné par le système) sur lequel la
socket courante écoute

n

Fermeture
* public void close()

n

Option : SO_TIMEOUT
* public synchronized void setSoTimeout(int timeout) throws
SocketException
Exercices
n

Ecrire un client UDP générique
ó

n
n

Une classe qui permet au programmeur d’utiliser les sockets UDP
sans avoir à manipuler les datagrammes (pas de DatagramPacket)

Ecrire un client UDP daytime
Ecrire une application echo client/serveur UDP multithreadée

Sockets multi-point
n

Communication multi-point : on s’adresse à un groupe
qu’on peut intégrer et quitter à sa guise
* Exemples : visio-conférence, radio, télévision, etc.

n

Multi-point = compromis
* Multi-diffusion
* Point-à-point

n

Caractéristiques
* Efficace car données dupliquées au moment opportun
* Basée sur l’utilisation de routeurs multi-point

n

Applications
* Jeux réseau multi -utilisateurs, SGF distribués, calcul parallèle
& distribué, etc.
Principe

Routeur
multi-point

Principe

Routeur
multi-point
Principe

Routeur
multi-point

Principe

Routeur
multi-point
Principe

Routeur
multi-point

Principe

Routeur
multi-point
Principe

Routeur
multi-point

Principe

Routeur
multi-point
Adresses et groupes multi-point (1)
Adresse multi-point

n

ò
ò

Référence un groupe d’hôtes (groupe multi-point)
Rangée dans la classe D (4 premiers bits : 1110)

Groupe multi-point

n

ò
ò

Plusieurs hôtes Internet partageant la même adresse multi point
Libre adhésion ou départ au/du groupe

lnternet Assigned Number Autority (IANA) est
responsable de l’affectation des adresses mutli-point

n

ò
ò

Il en existe 80
Exemple : AUDIONEWS.MCAST.NET --> 224.0.1.7 - Actualité
audio transmise en multi-point

Sockets

DESS-ISIDIS

Adresses et groupes multi-point (2)
ò

n
n

Liste exhaustive dans :

http://www.iana.org/assignments/multicast-addresses
Il existe des routeurs multi-point (mrouteurs)
Datagramme multi-point

TTL
1 octet

En-tête IP
4 octets

4 octets

En-tête UDP
2 octets

2 octets

2 octets

Charge utile
2 octets

Longueur
Port destinataire
Port expéditeur
Hôte destinataire

...

Contrôle pour fiabilité
Time-To-Live (TTL)
n

Définition
ò
ò

n

Portée d’un datagramme i.e. nombre de routeurs maximum par
lesquels un datagramme transite avant sa suppression
Réseau local : TTL=1, Région : TTL=16, Monde entier : TTL=127

Utilisation
* TTL décrémentée à chaque passage dans un routeur
* TTL=0 : datagramme supprimé

Mise en œuvre des sockets multi-point
n

Classe java.net.MulticastSocket
ò

n

Dérivée de la classe java.net.DatagramSocket

Constructeurs
ò

public MulticastSocket() throws SocketException
ó
ó

ò

Port assigné par le système
getLocalPort() : renvoie le numéro du port

public MulticastSocket(int port) throws
SocketException
Communication avec un groupe multi-point (1)
n

Opérations possibles
ò
ò
ò

n

Adhésion à un groupe
Echanger (Emettre/Recevoir) des données avec les
membres d’un groupe
Quitter un groupe

Méthodes
ò
ò

public void joinGroup(InetAddress adrmultipt) throws
SocketException
public void leaveGroup(InetAddress adrmultipt)
throws SocketException

Communication avec un groupe multi-point (2)
ò
ò
ò

Public synchronized void send(DatagramPacket dp,
byte ttl) throws IOException, SocketException
public void setInterface(InetAddress interface)
throws SocketException
public InetAddress getInterface() throws
SocketException
Exercices
n

Programmer une taupe multi-point
ò Adhésion

à un groupe multi-point
ò Boucle sur réception de données envoyées au
groupe
n

Ecrire un expéditeur de données multi-point
ò Adhésion

à un groupe multi-point
ò Envoi de données aux membres du groupe
ò Sortie du groupe

Contenu connexe

PPT
Le Réseau et Java
PPTX
Formation1 sockets
PDF
Rapport Sockets en Java
PDF
Chap7 java net
PDF
Programmation réseau en JAVA
PDF
Programmation réseau en JAVA
PPTX
Création des sites web pour débutant
PPT
Java Database Connectivity
Le Réseau et Java
Formation1 sockets
Rapport Sockets en Java
Chap7 java net
Programmation réseau en JAVA
Programmation réseau en JAVA
Création des sites web pour débutant
Java Database Connectivity

Tendances (19)

PDF
Rapport application chat
PDF
Introduction aux-sockets
PDF
Socket tcp ip client server on langace c
PDF
Les socket ing1_issat
PDF
Développement informatique : Programmation réseau
PDF
Reseau
PPTX
Sockets
PPT
Système répartis avec RMI
PPT
Etude DéTailléé de la pile réseau sous GNU Linux
PPTX
(adressage)
PPTX
Appels de procédures distants (RPC)
PDF
Bah mamadou hady
PDF
Hady bah l3
PPT
Tour Horizont.Net
PPT
Présentation de RMI Java
PPTX
Généralités sur les réseaux informatiques – Protocoles ip
PDF
Adressage ip l_adresse_ip_2
PDF
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Rapport application chat
Introduction aux-sockets
Socket tcp ip client server on langace c
Les socket ing1_issat
Développement informatique : Programmation réseau
Reseau
Sockets
Système répartis avec RMI
Etude DéTailléé de la pile réseau sous GNU Linux
(adressage)
Appels de procédures distants (RPC)
Bah mamadou hady
Hady bah l3
Tour Horizont.Net
Présentation de RMI Java
Généralités sur les réseaux informatiques – Protocoles ip
Adressage ip l_adresse_ip_2
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Publicité

En vedette (20)

PDF
Chat application in java using swing and socket programming.
PPT
Multi user chat system using java
PPT
Chat application
PPTX
"COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y...
PPTX
Mantenimiento correctivo al hardware y software 3 (1)
DOCX
La esencia de la filosofia
PPTX
Infecciones dentarias
PPT
PPTX
eE7_Projektarbeit_ErsteIdeen
PDF
CT11210424 kajian kes 9.1, 10.1, q4 apk
PPTX
Le dernier rappel de produit n’est pas loin
PPTX
Présentation1
DOCX
Curso virtual
PPTX
Eröffnung gernlinden
PDF
Medios Masivos de Mendoza
PPTX
Aprendizaje autonomo
PPT
Actividad 3 módulo 2 búsqueda google libros
PDF
Tc burger
PDF
Gefährten redaktionshemen 2013 08-05
PPTX
CROOS ESCOLAR
Chat application in java using swing and socket programming.
Multi user chat system using java
Chat application
"COMERCIALES VENEZOLANOS LANZADOS AL AIRE EN 1990 HASTA PRINCIPIOS DEL 2000 Y...
Mantenimiento correctivo al hardware y software 3 (1)
La esencia de la filosofia
Infecciones dentarias
eE7_Projektarbeit_ErsteIdeen
CT11210424 kajian kes 9.1, 10.1, q4 apk
Le dernier rappel de produit n’est pas loin
Présentation1
Curso virtual
Eröffnung gernlinden
Medios Masivos de Mendoza
Aprendizaje autonomo
Actividad 3 módulo 2 búsqueda google libros
Tc burger
Gefährten redaktionshemen 2013 08-05
CROOS ESCOLAR
Publicité

Similaire à 02 java-socket (20)

PDF
6- Javacousesforenginerss_reseaux_v2.pdf
PDF
Chapitre-4-Programmation-réseau-avec-les-sockets.pdf
PDF
cours_sockets_chap3 patie_I_22_03_2020.pdf
PDF
Chapitre -6-Programmation Réseaux (Les sockets).pdf
PPTX
Chapitre 6 - Protocoles TCP/IP, UDP/IP
PDF
S1.4- Java ME.pdfS1.4- Java ME.pdfS1.4- Java ME.pdfS1.4- Java ME.pdf
PPTX
SdE 11 - Reseau
PPTX
SDE 10 - Reseau
PDF
173544 introduction-aux-sockets
PDF
OWF12/PHP de inetd à ZeroMQ
PDF
Démons en PHP, de inetd à ZeroMQ
PDF
programmation réseau en java
PDF
8-socket.pdf
PDF
OSIS18_IoT : RTEMS pour l'IoT professionnel, par Pierre Ficheux (Smile ECS)
PPTX
PDF
Hacking your Home @bdx.io
PDF
C4 Réseaux : Couche reseau
PDF
Adressage ip
PDF
Cours6-AdressageIPtgths2wjioy5gvi86tjk.pdf
6- Javacousesforenginerss_reseaux_v2.pdf
Chapitre-4-Programmation-réseau-avec-les-sockets.pdf
cours_sockets_chap3 patie_I_22_03_2020.pdf
Chapitre -6-Programmation Réseaux (Les sockets).pdf
Chapitre 6 - Protocoles TCP/IP, UDP/IP
S1.4- Java ME.pdfS1.4- Java ME.pdfS1.4- Java ME.pdfS1.4- Java ME.pdf
SdE 11 - Reseau
SDE 10 - Reseau
173544 introduction-aux-sockets
OWF12/PHP de inetd à ZeroMQ
Démons en PHP, de inetd à ZeroMQ
programmation réseau en java
8-socket.pdf
OSIS18_IoT : RTEMS pour l'IoT professionnel, par Pierre Ficheux (Smile ECS)
Hacking your Home @bdx.io
C4 Réseaux : Couche reseau
Adressage ip
Cours6-AdressageIPtgths2wjioy5gvi86tjk.pdf

02 java-socket

  • 1. Université de Lille1 Les sockets java N. Melab melab@lifl.fr Sockets DESS-ISIDIS Plan n n n Le modèle Sockets java Sockets C-UNIX BSD 4.X
  • 2. Le modèle n n n n Sockets : interface (point de communication) client/serveur utilisée à l’origine dans le monde UNIX et TCP/IP Etendue aux PCs (Winsock) et mainframes Primitives pour le support de communications reposant sur les protocoles (TCP/IP, UDP/IP) Les applications client/serveur ne voient les couches de communication qu’à travers l’API socket (abstraction) Sockets DESS-ISIDIS Sockets/OSI Application cliente Protocole Applicatif Application serveur API Socket UDP API Socket TCP UDP TCP IP IP Physique Physique
  • 3. Rôle des sockets n n n n n n Connexion à une machine distante Envoi/Réception de données Fermeture d’une connexion Attachement à un port Acceptation d’une demande de connexion à un port local Attente de demandes de connexion Sockets DESS-ISIDIS Notion de port n Connexion réseau * Adresse internet de la machine * Numéro du port n Pourquoi les ports ? * Sur une même machine, plusieurs services sont accessibles simultanément (web, email, etc.) * Points d’accès : ports logiques (65535) * Rien à avoir avec les ports physiques (série et parallèle)
  • 4. Désignation des ports n n n Port : numéro allant de 1 à 65535 Les ports 1 à 1023 sont réservés aux services courants : finger, ftp, http (80), SMTP (25), etc. Fichier d’assignation de ports : /etc/services Sockets DESS-ISIDIS Adresse internet n Connexion réseau * Adresse internet de la machine * Numéro : 193.49.192.193 n Désignation par des noms symboliques * Association de noms symboliques aux adresses numériques * Domain Name System (ou DNS) * Exemple : lil.univ-littoral.fr : 193.49.192.193
  • 5. Sockets java Sockets DESS-ISIDIS Gestion des ports (adresses) en Java n Classe InetAdress * * Dans java.net Champs ó hostName ó address (exemple : lil.univ-littoral.fr) (32 bits, exemple : 193.49.192.193) Pas de constructeur * 3 méthodes statiques * ó public static InetAddress InetAddress .getByName(String hote) static InetAddress[] InetAddress .getAllByName(String hote) ó public static InetAddress InetAddress .getLocalHost() ó public n Classes Socket, SocketServer et SocketImpl * getInetAddress()
  • 6. Gestion des sockets n Taxinomie * Sockets ó Point à point : Socket, SocketServer, SocketImlp * Sockets ó Point TCP UDP à point : DatagramSocket MultiCastSocket ó Multi-point : * Dans java.net Sockets DESS-ISIDIS Sockets TCP n Classe Socket ò ò ò n Connexion à une machine distante Envoi/Réception de données Fermeture d’une connexion Classe SocketServer ò ò ò Attachement à un port Acceptation d’une demande de connexion à un port local Attente de demandes de connexion
  • 7. Classe Socket (1) n Constructeurs ò ò ò ò ò ò public Socket(String hote, int port) throws UnknownHostException, IOException public Socket(InetAddress hote, int port) throws IOException public Socket(String hote, int port, InetAddress interface, int portLocal) throws IOException public Socket(InetAddress hote, int port, InetAddress interface, int portLocal) throws IOException protected Socket() protected Socket(SocketImpl impl) Sockets DESS-ISIDIS Classe Socket (2) n Information ò public InetAddress getInetAddress() public int getPort() public int getLocalPort() ò public InetAddress getLocalAddress() ò ò n Envoi/Réception de données ò ò n public InputStream getInputStream() throws IOException public OutputStream getOutputStream() throws IOException Fermeture ò public synchronized void close() throws IOException
  • 8. Classe Socket (3) n Options ò TCP_NODELAY ó Données expédiées aussitôt que possible quelque soit leur taille ó ò Méthodes setTcpNoDelay (boolean valid) et setTcpNoDelay() SO_LINGER ó Attente ou non avant de fermer une socket au cas où il reste des données à envoyer ó Méthodes setSoLinger (boolean valid, int secondes) et getSoLinger() Sockets DESS-ISIDIS Classe Socket (4) ò SO_TIMEOUT ó Déclenchement d’exception si le délai spécifié est dépassé lors de la réception de données ó Méthodes setSoTimeout (int ms) et getSoTimeout() n Exceptions ò SocketException ó BindException : port déjà utilisé ou le programme n’a pas le droit de l’utiliser ó ConnectException : hôte occupé ou aucun processus n’écoute sur le port ó NoRouteToHostException : dépassement de temps
  • 9. Exercices Ecrire un programme qui : n ò ò se connecte au service daytime d’internet (port numéro 13) affiche la date et l’heure Ecrire un programme qui implémente le service echo (port numéro 7) - Utiliser les options des sockets Implémenter le protocole finger (port numéro 79) n n Sockets DESS-ISIDIS Classe ServerSocket (1) n n Rôle : standardiste Gestion d’une connexion ò ò ò ò ò Création d’un nouvel objet ServerSocket affecté à un port : constructeur ServerSocket Attente de connextion : accept() Echange d’informations : getInputStream() et getOutputStream() Clôture de la connexion par le client ou le serveur : close() Nouvelle attente
  • 10. Classe ServerSocket (2) n Prise en compte des connexions ò ò Un thread par connexion Dans ftp, un processus par connexion ó n Limite : 400 connexions Gestion des demandes de connexion ò File d’attente gérée par le système ó Taille = 50 par défaut mais peut être modifiée Sockets DESS-ISIDIS Classe ServerSocket (3) n Constructeurs ò ò ò ò n public ServerSocket(int port) throws IOException, BindException public ServerSocket(int port, int taillefile) throws IOException, BindException public ServerSocket(int port, int taillefile, InetAddress adresseAttache) throws IOException protected ServerSocket() Prise en compte et clôture d’une connexion ò ò public Socket accept() throws IOException public void close() throws IOException
  • 11. Classe ServerSocket (4) n Information ò ò n public InetAddress getInetAddress() public int getLocalPort() Options ò SO_TIMEOUT ó Doit être initialisé avant accept ó Méthodes Sockets setSoTimeout (int ms) et getSoTimeout() DESS-ISIDIS Exercice n Programmer le service daytime d’internet ò ò Ne pas utiliser le port numéro 13 sauf si vous avez les droits super-utilisateur Utiliser un numéro de port supérieur à 1024
  • 12. Protocoles TCP et UDP n TCP * * * * n Garantie d’arrivée dans l’ordre de paquets de données Fiabilité de transmission Lenteur des transmissions (http par exemple) Vu comme un «service téléphonique» UDP * * * * * Arrivée dans le bon ordre non garantie Non fiabilité des transmissions Rapidité des transmissions Applications audio/vidéo Vu comme un «service postal» Sockets UDP point-à-point n n Pas de différence de classe entre le client et le serveur Deux classes Java dans java.net * DatagramPacket * DatagramSocket n DatagramPacket * Assemblage des données en partance en datagrammes * Extraction des données des datagrammes reçus n DatagramSocket * Envoi et réception des datagrammes UDP (objets DatagramPacket)
  • 13. Classe DatagramPacket (1) n Constructeurs * DatagramPacket destiné à la réception de données ( public DatagramPacket(byte tampon[], int longueur) ( Réception des données dans tampon ( Longueur maximale : 65 507 octets ( Java remplit les champs de DatagramPacket : adresse IP de la machine distante et le numéro de port concerné * DatagramPacket destiné à l’envoi de données ( public DatagramPacket(byte tampon[], int longueur, InetAddress ia, int port) ( Conseil : utiliser getBytes() de la classe String pour transformer des chaînes de caractères en tableaux d’octets Classe DatagramPacket (2) Structure d’un datagramme En-tête IP 4 octets 4 octets 2 octets En-tête UDP 2 octets 2 octets Charge utile 2 octets ... Contrôle pour fiabilité Longueur Port destinataire Port expéditeur Hôte destinataire Hôte expéditeur
  • 14. Classe DatagramPacket (3) n Information * public int getPort() ( Numéro de port de provenance si datagramme reçu de port de destination si datagramme créé localement ( Numéro * public InetAddress getAddress() ( Adresse du hôte distant si datagramme reçu ( Adresse du hôte local si datagramme créé localement Classe DatagramPacket (4) n Information (suite) * public byte[] getData() ( Tableau d’octets du datagramme ( Caractères ASCII : String s=new String(dp.getData(), 0, 0, dp.getLength()); ( Caractères non ASCII : ByteArrayInputStream b=new ByteArrayInputStream(dp.getData(), 0, 0, dp.getLength()); * public InetAddress getLength() ( Taille en octets du datagramme
  • 15. Classe DatagramSocket (1) n Constructeurs * DatagramSocket utilisé par le client ( public DatagramSocket() throws SocketException ( Ports de destination et de partance spécifiés dans le datagramme (objet DatagramPacket) * DatagramSocket utilisé par le serveur ( public DatagramSocket(int port) throws SocketException ( Remarque : les ports TCP et leurs équivalents UDP ne sont pas liés i.e. un même numéro de port peut être associé à la fois à une socket TCP et une socket UDP sans provoquer aucun problème de conflit * DatagramSocket utilisé par le serveur multi -adresse ( public DatagramSocket(int port, InetAdress ia) throws SocketException Classe DatagramSocket (2) n Emission/Réception de datagrammes * public void send(DatagramPacket dp) throws IOException * public void receive(DatagramPacket dp) throws IOException n Information * public int getLocalPort() *Numéro de port (anonyme et assigné par le système) sur lequel la socket courante écoute n Fermeture * public void close() n Option : SO_TIMEOUT * public synchronized void setSoTimeout(int timeout) throws SocketException
  • 16. Exercices n Ecrire un client UDP générique ó n n Une classe qui permet au programmeur d’utiliser les sockets UDP sans avoir à manipuler les datagrammes (pas de DatagramPacket) Ecrire un client UDP daytime Ecrire une application echo client/serveur UDP multithreadée Sockets multi-point n Communication multi-point : on s’adresse à un groupe qu’on peut intégrer et quitter à sa guise * Exemples : visio-conférence, radio, télévision, etc. n Multi-point = compromis * Multi-diffusion * Point-à-point n Caractéristiques * Efficace car données dupliquées au moment opportun * Basée sur l’utilisation de routeurs multi-point n Applications * Jeux réseau multi -utilisateurs, SGF distribués, calcul parallèle & distribué, etc.
  • 21. Adresses et groupes multi-point (1) Adresse multi-point n ò ò Référence un groupe d’hôtes (groupe multi-point) Rangée dans la classe D (4 premiers bits : 1110) Groupe multi-point n ò ò Plusieurs hôtes Internet partageant la même adresse multi point Libre adhésion ou départ au/du groupe lnternet Assigned Number Autority (IANA) est responsable de l’affectation des adresses mutli-point n ò ò Il en existe 80 Exemple : AUDIONEWS.MCAST.NET --> 224.0.1.7 - Actualité audio transmise en multi-point Sockets DESS-ISIDIS Adresses et groupes multi-point (2) ò n n Liste exhaustive dans : http://www.iana.org/assignments/multicast-addresses Il existe des routeurs multi-point (mrouteurs) Datagramme multi-point TTL 1 octet En-tête IP 4 octets 4 octets En-tête UDP 2 octets 2 octets 2 octets Charge utile 2 octets Longueur Port destinataire Port expéditeur Hôte destinataire ... Contrôle pour fiabilité
  • 22. Time-To-Live (TTL) n Définition ò ò n Portée d’un datagramme i.e. nombre de routeurs maximum par lesquels un datagramme transite avant sa suppression Réseau local : TTL=1, Région : TTL=16, Monde entier : TTL=127 Utilisation * TTL décrémentée à chaque passage dans un routeur * TTL=0 : datagramme supprimé Mise en œuvre des sockets multi-point n Classe java.net.MulticastSocket ò n Dérivée de la classe java.net.DatagramSocket Constructeurs ò public MulticastSocket() throws SocketException ó ó ò Port assigné par le système getLocalPort() : renvoie le numéro du port public MulticastSocket(int port) throws SocketException
  • 23. Communication avec un groupe multi-point (1) n Opérations possibles ò ò ò n Adhésion à un groupe Echanger (Emettre/Recevoir) des données avec les membres d’un groupe Quitter un groupe Méthodes ò ò public void joinGroup(InetAddress adrmultipt) throws SocketException public void leaveGroup(InetAddress adrmultipt) throws SocketException Communication avec un groupe multi-point (2) ò ò ò Public synchronized void send(DatagramPacket dp, byte ttl) throws IOException, SocketException public void setInterface(InetAddress interface) throws SocketException public InetAddress getInterface() throws SocketException
  • 24. Exercices n Programmer une taupe multi-point ò Adhésion à un groupe multi-point ò Boucle sur réception de données envoyées au groupe n Ecrire un expéditeur de données multi-point ò Adhésion à un groupe multi-point ò Envoi de données aux membres du groupe ò Sortie du groupe