0% ont trouvé ce document utile (0 vote)
389 vues24 pages

Introduction aux Sockets Java et C-UNIX

Transféré par

Jamel Zarai
Copyright
© Attribution Non-Commercial (BY-NC)
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)
389 vues24 pages

Introduction aux Sockets Java et C-UNIX

Transféré par

Jamel Zarai
Copyright
© Attribution Non-Commercial (BY-NC)
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

Université de Lille1

Les sockets java

N. Melab
melab@[Link]

Sockets DESS-ISIDIS

Plan

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

n Sockets : interface (point de communication)


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

Sockets/OSI

Protocole Applicatif
Application cliente Application serveur

API Socket API Socket

UDP TCP UDP TCP

IP IP

Physique Physique
Rôle des sockets

n Connexion à une machine distante


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

Sockets DESS-ISIDIS

Notion de port

n Connexion réseau
* Adresseinternet 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 Port : numéro allant de 1 à 65535


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

Sockets DESS-ISIDIS

Adresse internet

n Connexion réseau
* Adresse internet de la machine
* Numéro : [Link]

n Désignation par des noms symboliques


* Association de noms symboliques aux adresses
numériques
* Domain Name System (ou DNS)
* Exemple : [Link] : [Link]
Sockets java

Sockets DESS-ISIDIS

Gestion des ports (adresses) en Java

n Classe InetAdress
* Dans [Link]
* Champs
ó hostName (exemple : [Link])
ó address (32 bits, exemple : [Link])
* Pas de constructeur
* 3 méthodes statiques
ó public static InetAddress InetAddress .getByName(String hote)
ó public static InetAddress[] InetAddress .getAllByName(String hote)
ó public static InetAddress InetAddress .getLocalHost()

n Classes Socket, SocketServer et SocketImpl


* getInetAddress()
Gestion des sockets

n Taxinomie
* Sockets TCP
ó Point à point : Socket, SocketServer, SocketImlp
* Sockets UDP
ó Point à point : DatagramSocket
ó Multi-point : MultiCastSocket
* Dans [Link]

Sockets DESS-ISIDIS

Sockets TCP

n Classe Socket
ò Connexion à une machine distante
ò Envoi/Réception de données
ò Fermeture d’une connexion
n 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
ò public InputStream getInputStream() throws IOException
ò public OutputStream getOutputStream() throws IOException
n 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

n Ecrire un programme qui :


ò se connecte au service daytime d’internet (port
numéro 13)
ò affiche la date et l’heure
n Ecrire un programme qui implémente le service
echo (port numéro 7) - Utiliser les options des
sockets
n Implémenter le protocole finger (port numéro 79)

Sockets DESS-ISIDIS

Classe ServerSocket (1)

n Rôle : standardiste
n 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
ó Limite : 400 connexions
n 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
ò 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()
n Prise en compte et clôture d’une connexion
ò public Socket accept() throws IOException
ò public void close() throws IOException
Classe ServerSocket (4)

n Information
ò public InetAddress getInetAddress()
ò public int getLocalPort()
n Options
ò SO_TIMEOUT
ó Doit être initialisé avant accept

ó Méthodes setSoTimeout (int ms) et getSoTimeout()

Sockets 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
* 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»
n 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 Pas de différence de classe entre le client et le


serveur
n Deux classes Java dans [Link]
* 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
( publicDatagramPacket(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 En-tête UDP Charge utile

...
4 octets 4 octets 2 octets 2 octets 2 octets 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
( Numéro de port de destination si datagramme créé
localement
* 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([Link](), 0, 0,
[Link]());
( Caractères non ASCII : ByteArrayInputStream b=new
ByteArrayInputStream([Link](), 0, 0, [Link]());
* 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


ó Une classe qui permet au programmeur d’utiliser les sockets UDP
sans avoir à manipuler les datagrammes (pas de DatagramPacket)
n Ecrire un client UDP daytime
n Ecrire une application echo client/serveur UDP multi-
threadé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)
n Adresse multi-point
ò Référence un groupe d’hôtes (groupe multi-point)
ò Rangée dans la classe D (4 premiers bits : 1110)
n Groupe multi-point
ò Plusieurs hôtes Internet partageant la même adresse multi -
point
ò Libre adhésion ou départ au/du groupe
n lnternet Assigned Number Autority (IANA) est
responsable de l’affectation des adresses mutli-point
ò Il en existe 80
ò Exemple : [Link] --> [Link] - Actualité
audio transmise en multi-point

Sockets DESS-ISIDIS

Adresses et groupes multi-point (2)


ò Liste exhaustive dans :
[Link]
n Il existe des routeurs multi-point (mrouteurs)
n Datagramme multi-point
TTL En-tête IP En-tête UDP Charge utile

1 octet
4 octets 4 octets 2 octets 2 octets 2 octets 2 octets
...
Contrôle pour fiabilité
Longueur
Port destinataire
Port expéditeur
Hôte destinataire
Time-To-Live (TTL)

n Définition
ò 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
n Utilisation
* TTL décrémentée à chaque passage dans un routeur
* TTL=0 : datagramme supprimé

Mise en œuvre des sockets multi-point

n Classe [Link]
ò Dérivée de la classe [Link]
n 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
ò Adhésion à un groupe
ò Echanger (Emettre/Recevoir) des données avec les
membres d’un groupe
ò Quitter un groupe
n 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

Vous aimerez peut-être aussi