SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
Master Spécialisé 
Qualité du Logiciel 
Rapport de projet 
Sockets en Java 
Réalisé Par : Soukaina NAJIHI 
Meryem ABOUNASR 
Soukaina BOUJADI 
Encadré Par : Mr. ELANSARI 
Année Universitaire 2013-2014
Remerciement 
Nous souhaitons adresser nos remerciements 
les plus sincères à notre professeur M 
ELANSARI qui nous a toujours aidé et apporté 
ses directives et remarques pertinentes .Nous le 
remercions encore pour l’occasion qu’il nous a 
donné pour affronter ce monde merveille 
d’Unix. 
Année Universitaire 2013-2014 2
Table des matières 
Remerciement.............................................................................................................................. 2 
Table des matières ....................................................................................................................... 3 
CHAPITRE 1: Introduction au sockets ................................................................................... 5 
1.1 Problème ....................................................................................................................................... 6 
1.2 Comment ? -> Interface TCP/IP APPLICATION .......................................................................... 6 
1.3 Les adresses IP en Java .................................................................................................................. 8 
CHAPITRE 2: Qu'est-ce qu'un socket ? ........................................................................ 10 
2.1 Définition du socket .................................................................................................................... 11 
2.2 Sockets TCP/UDP ......................................................................................................................... 12 
CHAPITRE 3 : Socket en mode connecté ..................................................................... 13 
3.1 Pour mieux comprendre : exemple appel téléphonique ............................................................ 14 
3.1.1 accueil téléphonique d’une entreprise ................................................................................ 14 
3.1.2 Comme le téléphone ........................................................................................................... 14 
3.1.3 Installation du téléphone .................................................................................................... 15 
3.1.4 La conversation téléphonique .............................................................................................. 16 
3.1.5 Raccrocher le téléphone ....................................................................................................... 16 
3.1.6 Overview ............................................................................................................................... 17 
3.2 Socket TCP - Déroulement ......................................................................................................... 17 
3.3 Implémentation : Socket TCP ...................................................................................................... 18 
3.4 Gestion du parallélisme sur le serveur ........................................................................................ 23 
3.4.1 Serveur Multi-Threads ......................................................................................................... 23 
3.4.2 Déroulement en multi-thread .............................................................................................. 24 
3.4.3 Un serveur TCP/IP multiclients ........................................................................................... 25 
3.4.4 Implémentation d’un serveur multi-thread ......................................................................... 26 
CHAPITRE 4 : Socket en mode non connecté .............................................................. 31 
4.1 La classe DatagramPacket ........................................................................................................... 32 
4.2 La classe DatagramSocket .......................................................................................................... 34 
4.3 Socket UDP:Déroulement ............................................................................................................ 36 
4.4 Implémentation : Socket UDP ..................................................................................................... 37 
CHAPITRE 5 : Comparaison socket JAVA ET C ............................................................ 40 
Année Universitaire 2013-2014 3
5.1 En mode Connecté ...................................................................................................................... 41 
5.1.1 Côté serveur ......................................................................................................................... 41 
5.1.2 Client ..................................................................................................................................... 43 
5.1.3 Récpitulatif ........................................................................................................................... 43 
5.2 En mode déconnecté ................................................................................................................... 45 
5.2.1 Côté serveur et côté Client ................................................................................................... 45 
5.2.2 Récapitulatif ......................................................................................................................... 45 
Année Universitaire 2013-2014 4
CHAPITRE 1: 
Introduction au sockets 
Année Universitaire 2013-2014 5
1.1 Problème 
La communication via un LAN ou WAN possède de multiples applications : 
* client/serveur Internet, 
* commande à distance de différents équipements : robot industriel, robot de 
chirurgie, commande d’équipement, … 
* gestion d’appareils de mesure via un LAN, 
Prenons un exemple : pilotage d’une installation de chauffage à distance. 
On souhaite gérer une installation de chauffage à distance soit par : 
a) un ordinateur ; 
b) un téléphone portable GSM ; 
1.2 Comment ? -> Interface TCP/IP 
APPLICATION 
Après avoir étudié les protocoles TCP/IP, il reste à voir le problème de 
l’interface entre les programmes d’application et les logiciels de la pile 
TCP/IP, il existe différentes solutions pour résoudre ce problème parmi eux 
on trouve les sockets. 
Année Universitaire 2013-2014 6
Le schéma ci-dessous permet de faire la correspondance entre les couches 
de la modélisation contemporaine et celles de la représentation 
macroscopique d'un système d'exploitation. 
Le logiciel correspondant aux protocoles allant de la couche physique jusqu'à 
la couche transport fait partie du sous-système réseau du noyau du système 
d'exploitation. Le programme utilisateur est lancé à partir de la couche Shell 
et est exécuté au niveau application. 
L'utilisation de sockets revient à ouvrir un canal de communication entre la 
couche application et la couche transport. 
Les sockets servent à communiquer entre deux hôtes appelés Client / 
Serveur à l'aide d'une adresse IP et d'un port ; ces sockets permettront de 
gérer des flux entrant et sortant afin d'assurer une communication entre les 
deux (le client et le serveur), soit de manière fiable à l'aide du protocole 
TCP/IP, soit non fiable mais plus rapide avec le protocole UDP. 
Voici ce qu'on peut réaliser à l'aide des sockets : 
 des jeux en ligne ; 
 des systèmes distribués ; 
 des espaces messengers comme MSN Messenger, Yahoo Messenger, … ; 
 des applications comme BitComet permettant de gérer les fichiers 
.torrent que vous connaissez ; 
 et bien d'autres choses. 
Année Universitaire 2013-2014 7
1.3 Les adresses IP en Java 
 Représentés par la classe java.net.InetAddress 
Contient 2 champs : 
 hostname : Stocke le nom de l’hôte (ex: www.monsite.com) 
 address : Stocke l’adresse IP de l’hôte 
 Pas de constructeurs publics. 
 Pour créer une InetAddress, il faut utiliser une des méthodes suivantes 
: 
public static InetAddress getByName(String nom_hote) 
public static InetAddress [] getAllByName(String nom_hote) 
public static InetAddress getLocalHost() 
 public static InetAddress getByName (String nom_hote) 
Cette méthode utilise le DNS pour renvoyer une instance de la classe 
InetAddress contenant l’adresse IP de la machine dont le nom est passé en 
paramètre 
En cas d’erreur, lève l’exception UnknownHostException 
Exemple : 
InetAddress adr = InetAddress.getbyName(“www.site.com“); 
 public static InetAddress getByName [] (String nom_hote) 
 Renvoie toutes les adresses IP de la machine (dont le nom est passé 
en paramètre) 
Année Universitaire 2013-2014 8
 En cas d’erreur, lève l’exception UnknownHostException 
 public static InetAddress getLocalHost () 
 Renvoie une instance de la classe InetAddress 
 contenant l’adresse IP de la machine locale 
 En cas d’erreur, lève l’exception UnknownHostException 
Équivalent à : 
 getByName(null) , getByName("localhost") 
 public String getHostName () 
 Renvoie la chaine de caractères contenant le nom de la machine 
locale 
 Renvoie l’adresse IP de la machine si elle n’a pas de nom 
 public byte [] getAddress () 
 Renvoie l’adresse IP de la machine locale sous forme de tableau 
d’octets rangés selon l’ordre réseau . Le premier octet contient 
l’octet de poids fort de l’adresse 
Année Universitaire 2013-2014 9
CHAPITRE 2: 
Qu'est-ce qu'un socket ? 
Année Universitaire 2013-2014 10
2.1 Définition du socket 
Un socket est un point de terminaison d'une communication bidirectionnelle, 
c'est-à-dire entre un client et un serveur en cours d'exécution sur un réseau 
donné. Les deux sont liés par un même numéro de port TCP de sorte que la 
couche puisse identifier la demande de partage de données. 
Un serveur fonctionne sur une machine bien définie et est lié à un numéro de 
port spécifique. Le serveur se met simplement à l'écoute d'un client, qui 
demande une connexion. 
Il existe au moins deux grands modes de communication : 
 par paquet (datagram) : dans ce mode on est pas connecté 
 en flux (stream) : dans ce mode on est connecté 
Année Universitaire 2013-2014 11
2.2 Sockets TCP/UDP 
Dans le mode flux (Mode Connecté) 
- les informations sont reçues dans l’ordre exact de leur émission 
- il n’y a pas de perte . 
- Ouverture d'une liaison, suite d'échanges, fermeture de la liaison. 
- Le serveur préserve son état entre deux requêtes. 
- Garanties de TCP : ordre, contrôle de flux, fiabilité. 
- Adapté aux échanges ayant une certaine durée (plusieurs 
messages). 
- inconvénient : nécessite l’établissement d’une connexion et 
consomme donc des ressources pour sa gestion 
Dans le mode paquet (Mode non connecté) 
- il n’existe pas d’ordre dans la délivrance des paquets 
- un paquet posté en premier peut arriver en dernier 
- il n’existe pas non plus de fiabilité 
- un paquet envoyé peut être perdu 
- Les requêtes successives sont indépendantes. 
- Pas de préservation de l'état entre les requêtes. 
- Le client doit indiquer son adresse à chaque requête (pas de liaison 
permanente). 
- Pas de garanties particulières. 
- Adapté aux échanges brefs (réponse en 1 message). 
- intérêt : souple et léger... 
Année Universitaire 2013-2014 12
CHAPITRE 3 : 
Socket en mode connecté 
Année Universitaire 2013-2014 13
3.1 Pour mieux comprendre : exemple appel 
téléphonique 
3.1.1 accueil téléphonique d’une entreprise 
Les entreprises disposent généralement d’un standard téléphonique chargé 
d’aiguiller les appels vers le bon destinataire : 
3.1.2 Comme le téléphone 
Les sockets sont la méthode BSD (inventée par l’Université de Berkeley) pour 
réaliser des communications entre processus (IPC, Inter Processus 
Communications). C’est-à-dire qu’un socket permet à un processus de 
communiquer avec un autre situé à distance sur le même LAN, tout comme 
une ligne de téléphone permet à deux personnes de se parler. L’analogie avec 
le réseau téléphonique est excellente et nous allons l’utiliser au long de ce 
petit guide. 
Année Universitaire 2013-2014 14
3.1.3 Installation du téléphone 
Pour recevoir des appels téléphoniques, il nous faut installer le téléphone. De 
même nous devons créer un socket qui attendra des connexions. Cela se fait 
en plusieurs étapes : 
a) Installation d’une nouvelle ligne ; l’instanciation de la classe 
ServerSocket, qui met en oeuvre une sorte de port que les serveurs 
peuvent utiliser pour écouter et accepter les connexions des clients. 
b) Après la création, nous devons indiquer à notre socket quel port 
écouter, exactement comme le numéro de téléphone que vous obtenez, 
vous permettra de recevoir des appels. C’est le rôle du constructeur de 
la classe ServerSocket qui « attache » le socket serveur à un port ; Ce 
qui nous donne : 
ServerSocket socketserver = new ServerSocket(numero_port); 
c) Pendant le traitement d’une connexion. Nous avons la possibilité 
d’indiquer le nombre maximum de requêtes possibles. Il existe deux 
autres constructeurs ; l'un a deux paramètres, le premier est bien sûr 
le numéro de port et le nombre total de connexion simultanées 
acceptées, voyez : 
ServerSocket socketserver = new ServerSocket(numer_port,nbr_max); 
nbr_max est le nombre maximal de connexions traitées 
simultanément. Par exemple au-delà de cinq tentatives de connexion 
consécutives autorisées, les connexions sont refusées. 
Pour le second constructeur il suffit de spécifier l'adresse locale du 
serveur. 
ServerSocket socketserver = new 
ServerSocket(numer_port,nbr_max,adresse_locale); 
d) Après la création de socket permettant de recevoir des appels, il faut 
répondre aux demandes de connexion. C’est le rôle de la fonction 
Année Universitaire 2013-2014 15
accept (), qui est analogue à l’action de décrocher le combiné lorsque 
le téléphone sonne. Cette fonction accept () va retourner un nouvel 
socket, qui sera connecté à l’appelant. 
Socket socketduserveur = socketserver.accept(); 
e) Vous savez maintenant comment créer un socket qui accepte les 
demandes de connexion. Mais comment l’appeler ? Pour passer un 
appel téléphonique, vous devez avoir le téléphone. Eh bien, vous allez 
utiliser la fonction socket(), exactement comme pour l’établissement 
d’un socket qui doit attendre les connexions. Mais vous devez lui 
indiquez le nom de la machine sur laquelle le serveur est en exécution 
et le numéro de port sur lequel il écoute. 
Socket socket = new Socket(param1, param2) 
f) Il faut alors écrire une fonction rassemblant les appels systèmes ci-dessus. 
Cette fonction appelle un port particulier d’une certaine 
machine, qu’on lui passe en paramètre. 
3.1.4 La conversation téléphonique 
Maintenant que vous disposez d’une connexion entre deux sockets, vous 
allez vouloir échanger des données entre les 2 machines mises en jeu (ou la 
même, le réseau étant transparent, il peut s’agir de processus sur le même 
système, peu importe !). Et là, vous allez voir la magie de la chose : on utilise 
les fonctions read () et write (). 
3.1.5 Raccrocher le téléphone 
De la même façon que vous devez raccrocher le combiné téléphonique 
lorsque vous avez terminé votre conversation, vous devez couper la 
connexion entre les deux sockets lorsque tout est fini. On utilise pour cela la 
fonction close (). 
Année Universitaire 2013-2014 16
3.1.6 Overview 
3.2 Socket TCP - Déroulement 
Année Universitaire 2013-2014 17
3.3 Implémentation : Socket TCP 
Le client envoie au serveur un nombre entier, le serveur le multiple par 5 et 
renvoie le résultat au client 
 Serveur.java : Exemple d’un serveur simple : 
Année Universitaire 2013-2014 18
import java.io.*; 
import java.net.*; 
public class Serveur { 
public static void main(String[] args) { 
try { 
ServerSocket ss=new ServerSocket(1234); 
System.out.println("j'attend la connexion d'un client"); 
Socket clientSocket=ss.accept(); 
System.out.println("Nouveau client connecté"); 
System.out.println ("Génération de objet InptStream et 
OutputStream de la socket"); 
InputStream is=clientSocket.getInputStream(); 
OutputStream os=clientSocket.getOutputStream(); 
System.out.println("J'attend un nombre (1 octet)!"); 
int nb=is.read(); 
System.out.println("J'envoie la réponse"); 
os.write(nb*5); 
System.out.println("Déconnexion du client"); 
clientSocket.close(); 
} catch (IOException e) { 
e.printStackTrace(); 
}}} 
1) Client.java : Exemple d’un client simple 
Année Universitaire 2013-2014 19
import java.io.*; 
import java.net.*; 
import java.util.Scanner; 
public class Client { 
public static void main(String[] args) { 
try { 
System.out.println("Créer une connexion au serveur:"); 
Socket clientSocket=new Socket("localhost", 123); 
System.out.println("Génération de objet InptStream et 
OutputStream de la socket"); 
InputStream is=clientSocket.getInputStream(); 
OutputStream os=clientSocket.getOutputStream(); 
System.out.println("Lire un nombre au clavier NB="); 
Scanner clavier=new Scanner(System.in); 
int nb=clavier.nextInt(); 
System.out.println("Envoyer le nombre "+nb+" au 
serveur"); 
os.write(nb); 
System.out.println("Attendre la réponse du serveur:"); 
int rep=is.read(); 
System.out.println("La réponse est :"+rep); 
} catch (Exception e) { 
e.printStackTrace(); 
}}} 
Année Universitaire 2013-2014 20
 Lancement du serveur : 
Après le lancement du serveur la console affiche le message suivant 
J'attend la connexion d’un client 
Console Serveur 
 Lancement du client : 
J’attend la connexion d’un client 
Nouveau client connecté 
Génération de objet InptStream et OutputStream de la socket 
J’attend un nombre (1 octet) ! 
Console Serveur 
Créer une connexion au serveur: 
Génération de objet InptStream et OutputStream de la socket 
Lire un nombre au clavier NB=_ 
Console Client 
 Saisir un nombre par le client et l’envoyer au serveur : 
Année Universitaire 2013-2014 21
J’attend la connexion d’un client 
Nouveau client connecté 
Génération de objet InptStream et OutputStream de la socket 
J’attend un nombre (1 octet) ! 
J’envoie la réponse 
Déconnexion du client 
Console Serveur 
Créer une connexion au serveur: 
Génération de objet InptStream et OutputStream de la socket 
Lire un nombre au clavier NB=12 
Envoyer le nombre 12 au serveur 
Attendre la réponse du serveur 
La réponse est : 60 
Console Client 
Année Universitaire 2013-2014 22
3.4 Gestion du parallélisme sur le serveur 
La communication ne doit pas rester bloquée pour un client 
D’après ce qu’on a vu dans jusqu’à maintenant, un seul processus serveur : 
S’il y a des clients multiples, ils sont traités en séquence (les requêtes sont 
conservées dans une file d’attente associée à la socket serveur) 
La longueur max de cette file d’attente peut être spécifiée lors 
de la création de la socket serveur. Valeur par défaut : 50. 
Mais si l ' on veut que plus que deux puissent communiquer entre eux à 
la fois , comment faire ? D'où la nécessité d'utiliser les Threads. 
3.4.1 Serveur Multi-Threads 
Pour qu’un serveur puisse communiquer avec plusieurs client en même 
temps, il faut que: 
- Le serveur puisse attendre une connexion à tout moment. 
- Pour chaque connexion, il faut créer un nouveau thread associé à la 
socket du client connecté (donc à l’exécution de accept()), puis 
attendre à nouveau une nouvelle connexion 
- Le thread créé doit s’occuper des opérations d’entrées-sorties 
(read/write) pour communiquer avec le client indépendamment des 
autres activités du serveur (Une socket service client différente est 
créé pour chaque client). 
- Le thread veilleur se remet ensuite en attente 
Année Universitaire 2013-2014 23
Connections multithread 
3.4.2 Déroulement en multi-thread 
Année Universitaire 2013-2014 24
3.4.3 Un serveur TCP/IP multiclients 
class Service implements Runnable 
{ 
private Socket s; 
Service (Socket _s) 
{s=_s; } 
void run() 
{ 
//bla bla bla 
s.close(); 
} 
} 
while (true) 
{ 
accepter la connexion d’un nouveau 
client et créer une socket service client; 
créer un thread pour interagir avec ce client 
sur la nouvelle socket service client ; 
} 
.... 
ServerSocket socketAttente; 
SocketAttente = new ServerSocket(7777); 
while (true) { 
Socket socket=socketAttente.accept(); 
// Connexion établie 
// La communication est désormais possible 
Service s=new Service(socket); 
Thread t = new Thread(s); 
t.start(); 
} 
SocketAttente.close(); 
.... 
Année Universitaire 2013-2014 25
le serveur utilise une classe Service implémentant l’interface 
Runnable(thread) pour gérer les échanges de données en tâche de fond. 
C’est ce thread qui réalise le service demandé 
3.4.4 Implémentation d’un serveur multi-thread 
Le serveur se compose au minimum par deux classes : 
 ServeurMultiThread.java : serveur principal : 
Année Universitaire 2013-2014 26
import java.io.*; 
import java.net.*; 
public class ServeurMultiThread extends Thread { 
int nbClients=0; // pour compter le nombre de clients connectés 
public void run(){ 
try { 
System.out.println("J'attend une connexion"); 
ServerSocket ss=new ServerSocket(4321); 
while(true){ 
Socket s=ss.accept(); 
++nbClients; 
new ServiceClient(s,nbClients).start(); 
} 
} catch (IOException e) {e.printStackTrace();} 
} // Fin de la méthode run 
public static void main(String[] args) { 
new ServeurMultiThread().start(); 
}} 
Année Universitaire 2013-2014 27
 La classe qui gère les entrées-sorties : ServiceClient.java : 
import java.io.*; 
import java.net.*; 
public class ServiceClient extends Thread { 
Socket client; 
int numero; 
public ServiceClient(Socket s,int num){client=s;numero=num; } 
public void run(){ 
try { 
BufferedReader in=new BufferedReader( 
new InputStreamReader(client.getInputStream())); 
PrintWriter out=new PrintWriter(client.getOutputStream(),true); 
System.out.println("Client Num "+numero); 
out.println("Vous etes le client num "+numero); 
while(true){ 
String s=in.readLine(); 
out.println("Votre commande contient "+ s.length()+" caractères"); 
} 
} 
catch (IOException e) { 
e.printStackTrace();} 
} 
} 
Année Universitaire 2013-2014 28
 Lancement du serveur multithreads : 
Après le lancement du serveur la console affiche le message suivant 
J'attend une connexion 
Console Serveur 
 Lancement des client : 
J'attend une connexion 
J'attend une connexion 
Client Num 1 
J'attend une connexion 
Client Num 2 
Vous etes le client num 1 
Vous etes le client num 2 
Console Serveur 
Client 1 Client 2 
Année Universitaire 2013-2014 29
 Communication entre les clients et le serveur : 
J'attend une connexion 
J'attend une connexion 
Client Num 1 
J'attend une connexion 
Client Num 2 
Vous etes le client num 1 
Soukaina 
Votre commande contient 8 
caractères 
Meryem 
Votre commande contient 6 
caractères 
Console Serveur 
Vous etes le client num 2 
MQL 
Votre commande contient 3 
caractères 
UNIX 
Votre commande contient 4 
caractères 
Client 1 Client 2 
Année Universitaire 2013-2014 30
CHAPITRE 4 : 
Socket en mode non connecté 
Année Universitaire 2013-2014 31
Dans java.net on trouve les classes : 
•DatagramSocket 
•DatagramPacket 
4.1 La classe DatagramPacket 
Cette classe permet de créer des objets qui contiendront les données 
envoyées ou reçues ainsi que l'adresse de destination ou de provenance du 
datagramme. 
Deux constructeurs sont disponibles, un pour les paquets à recevoir, l'autre 
pour les paquets à envoyer. 
 public DatagramPacket(byte buffer[], int taille) 
Construit un objet pour recevoir un datagramme. Le 
paramètre buffer correspond à la zone où doit être stocké le datagramme 
reçu et le paramètre taille correspond à la taille maximale des datagrammes 
à recevoir. 
byte[]buffer : tableau d’octets permettant la réception des données 
ATTENTION : Si la taille du tableau est insuffisante, les données seront 
tronquées 
Exemple 
byte[] tampon = new byte[1024]; 
DatagramPacket datagramme = new DatagramPacket(tampon, 
tampon.length); 
Année Universitaire 2013-2014 32
 public DatagramPacket(byte buffer[], int taille, InetAddress adresse, int 
port) 
Construit un objet pour envoyer un datagramme. Le 
paramètre buffer correspond à la zone où est stocké le datagramme à 
envoyer, le paramètre taille correspond à la taille du datagramme à 
envoyer, adresse correspond à l'adresse de la machine à qui envoyer le 
datagramme et port sur quel port UDP. 
Exemple 
String message = “coucou !!! “ ; 
byte[] tampon = message.getBytes(); 
InetAddress adresse= 
InetAddress.getByName(“moncorrepsondant.fr“); 
DatagramPacket datagramme = new DatagramPacket(tampon, 
tampon.length, adresse, 45848); 
Des méthodes sont disponibles pour manipuler de tels objets : 
 public synchronized InetAddress getAddress () 
Retourne l'adresse stockée dans le paquet. 
 public synchronized int getPort () 
Retourne le port stocké dans le paquet. 
 public synchronized byte[] getData () 
Retourne les données stockées dans le paquet. 
 public synchronized int getLength () 
Retourne la taille des données stockées dans le paquet. 
 public synchronized void setAddress(InetAddress iaddr) 
Modifie ou affecte l'adresse de destination. 
 public synchronized void setPort(int iport) 
Année Universitaire 2013-2014 33
Modifie ou affecte le port de destination. 
 public synchronized void setData(byte ibuf[]) 
Modifie ou affecte la référence de la zone contenant les données. 
 public synchronized void setLength(int ilength) 
Modifie ou affecte la taille de la zone contenant les données. 
4.2 La classe DatagramSocket 
Cette classe permet de créer des sockets UDP qui permettent d'envoyer et de 
recevoir des datagrammes UDP. 
Avant toute communication en mode UDP il est nécessaire de créer 
une socket aussi bien du coté client que du coté serveur. Pour cela Java 
propose trois constructeurs : 
 public DatagramSocket () throws SocketException 
Crée un objet de type socket et l'attache à un port disponible de la machine 
locale. Ce constructeur doit être utilisé dans les clients pour lesquels le port 
d'attachement n'a pas besoin d'être connu. 
Remarque : pas d’arguments pour le constructeur car toutes les 
informations se trouvent dans le paquet envoyé. 
 public DatagramSocket (int port) throws SocketException 
Crée un objet de type socket et l'attache au port UDP local passé en 
paramètre. En particulier, ce constructeur doit être utilisé dans les serveurs 
pour lesquels le port d'attachement a besoin d'être fixé préalablement afin 
qu'il soit connu des clients. 
 public DatagramSocket(int port, InetAddress laddr) throws 
SocketException 
Crée un objet de type socket, l'attache au port UDP local passé en paramètre 
et à une adresse spécifique de la machine locale. Ce constructeur n'est utile 
que si la machine locale dispose de plusieurs adresses Internet. 
Année Universitaire 2013-2014 34
Une fois le socket (objet de type DatagramSocket) créée et attachée à un 
port particulier de la machine locale, il est possible d'envoyer et de recevoir 
des datagrammes, via cette socket, au moyen des méthodes suivantes : 
 public void send(DatagramPacket data) throws IOException 
Permet d'envoyer les données contenues dans la variable data vers la 
machine et le port dont les valeurs ont été préalablement spécifiées dans la 
variable data. 
 public synchronized void receive(DatagramPacket data) throws 
IOException 
Permet de recevoir un datagramme qui sera stocké dans data. Après 
appel, data contient les données reçues, leur taille, l'adresse de l'envoyeur 
ainsi que son port d'attachement. Cette méthode est bloquante tant qu'il n'y 
a rien à recevoir. Si le message est trop long pour être stocké, celui-ci est 
tronqué, et le reste est perdu. Il n'est donc pas possible de recevoir des 
messages dont on ne connait pas préalablement la taille. 
 public void close() throws IOException 
Même si Java ferme les DatagramSocket à la fin du programme (ou via le 
Garbage collect), il est DE BON USAGE de fermer EXPLICITEMENT les 
DatagramSockets via la méthode close une fois qu’ils ne sont plus utiles. 
Année Universitaire 2013-2014 35
4.3 Socket UDP:Déroulement 
 Un schéma récapitulatif 
Année Universitaire 2013-2014 36
4.4 Implémentation : Socket UDP 
 Server.java 
import java.net.*; 
public class Server { 
public static void main(String []args) { 
try { 
DatagramSocket s = new DatagramSocket(5678); 
byte []data = new byte[100]; 
System.out.println("J'attend un Client"); 
DatagramPacket paquet = new DatagramPacket(data,data.length); 
while (true) { 
s.receive(paquet); 
String st = new String(paquet.getData(),0,paquet.getLength()); 
System.out.print("J'ai reçu ["+st+"]"); 
System.out.println(" depuis la machine "+" "+ 
paquet.getAddress().getHostName()+" port :"+ 
paquet.getPort()); 
}} catch(Exception ex) { 
ex.printStackTrace(); 
System.exit(1); 
}}} 
Année Universitaire 2013-2014 37
 Client.java 
import java.net.*; 
public class Client { 
public static void main(String []args) { 
try { 
DatagramSocket s = new DatagramSocket(); 
byte []data = args[0].getBytes(); 
InetSocketAddress sa = new InetSocketAddress("localhost",5678); 
System.out.println("le paquet est créé !"); 
DatagramPacket paquet = new DatagramPacket(data,data.length,sa); 
System.out.println("le paquet est envoyé"); 
s.send(paquet); 
} catch(Exception ex) { 
ex.printStackTrace(); 
System.exit(1); 
}}} 
Année Universitaire 2013-2014 38
 Lancement du serveur : 
J’attend un client 
 Lancement du client : 
En passant une chaine de caractère ‘Abounasr Najihi Boujadi’ 
J’attend un client 
J'ai reçu [Abounasr Najihi Boujadi] depuis la machine Adresse 127.0.0.1 
port :5888 
Le paquet est créé ! 
Le paquet est envoyé ! 
Console Serveur 
Console Client 
Année Universitaire 2013-2014 39
CHAPITRE 5 : 
Comparaison socket JAVA 
ET C 
Année Universitaire 2013-2014 40
le principe des sockets reste le même dans les deux langages, la comparaison 
sera faite au niveau des syntaxes du code utilisé dans chaque langage : 
5.1 En mode Connecté 
5.1.1 Côté serveur 
JAVA En Unix /C 
- Créer un Socket 
- L’Attacher à un port 
et adresse 
- Lui permettre de 
scruter et stocker 
les demandes de 
connexions 
entrantes avant 
acceptation 
- paramétrer la taille 
de la FIFO des 
requêtes 
Classe ServerSocket 
Trois constructeurs 
possibles : 
- numéro_port 
(obligatoire) 
- Et taille 
maximale FIFO 
- Et Adresse IP 
PS : cette classe fait les 
3 taches de langage C 
socket()+bind()+listen() 
- socket() 
//création en mode 
STREAM 
- bind() 
//assignation 
numéro de port et 
adresse IP 
- listen() 
// taille maximale FIFO 
- Le processus doit 
être bloqué tant 
qu’aucune demande 
de connexion ne lui 
parvient sur la 
socket générique 
d’écoute : = => 
fonction bloquante 
- L’acceptation 
consiste à 
considérer 
positivement une 
demande reçue et à 
Classe ServerSocket 
Méthode accept 
// retourne un objet 
Socket 
accept 
// retourne 
l’identificateur de la 
nouvelle créée ainsi 
que les 
caractéristiques du 
client distant 
Année Universitaire 2013-2014 41
créer localement 
une socket 
spécifique dédiée à 
supporter l’échange 
de données sur cette 
connexion 
particulière 
==> Cette socket 
représente l’extrémité 
« serveur » de la 
connexion TCP initiée 
par un « client » 
distant. 
- EMISSION : Revient à 
Ecrire/Envoyer un 
message (x octets) 
sur la connexion 
- RECEPTION : Revient 
à Lire/Recevoir un 
message (x octets) 
sur la connexion 
Classe Socket 
- Emission : 
méthode 
getInputStream 
Réception : 
méthode 
getOuputStream 
- Emission : 
primitives send ou 
write 
- Réception : 
primitives recv ou 
read 
Année Universitaire 2013-2014 42
5.1.2 Client 
JAVA En Unix /C 
- Créer un Socket 
- L’attacher à un port 
et adresse 
- L’utiliser pour 
demander 
l’établissement 
d’une connexion 
TCP avec un 
processus distant « 
répondant » 
Quatre constructeurs 
possibles 
- Adresse IP ou 
nom_host distant ET 
numéro_port 
distant 
(obligatoires) 
- Et Adresse IP ou 
nom_host local ET 
numéro_port local 
PS : cette classe fait les 3 
taches de langage C 
socket()+bind()+connect() 
- socket() 
// création en 
mode STREAM 
- bind() 
// assignation 
numéro de port et 
adresse IP 
- connect() 
//permet à un 
client de se 
connecter à le 
serveur. 
EMISSION : Revient à 
Ecrire/Envoyer un 
message (x octets) sur 
la connexion 
RECEPTION : Revient à 
Lire/Recevoir un 
message (x octets) sur 
la connexion 
Classe Socket 
- Emission : méthode 
getInputStream 
- Réception : 
méthode 
getOuputStream 
Emission : 
primitives send ou 
write 
Réception : 
primitives recv ou 
read 
5.1.3 Récpitulatif 
 Version Unix/) : 
Année Universitaire 2013-2014 43
 Version JAVA : 
Année Universitaire 2013-2014 44
5.2 En mode déconnecté 
5.2.1 Côté serveur et côté Client 
JAVA En Unix /C 
- Créer une socket 
localement 
- Numéro de port 
prédéfini côté « 
serveur » 
Créer un socket UDP 
avec 
- DatagramSocket (int 
port) :Côté serveur 
- DatagramSocket() : 
côté client 
Créer le socket UDP 
avec la fonction 
socket () + 
La fonction bind() 
pour l’attacher à un 
port 
Transfert de données 
(des deux côtés) : 
EMISSION : Envoyer X 
octets vers une socket 
distante dont on 
précise les 
caractéristiques 
RECEPTION : Recevoir 
X octets provenant 
d’une socket distante 
dont on récupère les 
caractéristiques pour 
en déterminer 
l’origine ==> fonction 
bloquante 
Classe SocketDatagram 
- Emission : 
méthode send 
- Réception : 
méthode receive 
Classe DatagramPacket 
- Constructeurs 
pour l’envoi 
- Constructeurs 
pour la réception 
Emission : primitives 
sendto 
Réception : 
primitives recvfrom 
5.2.2 Récapitulatif 
 Version Unix/C : 
Année Universitaire 2013-2014 45
 Version Java : 
Année Universitaire 2013-2014 46
Année Universitaire 2013-2014 47

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Java RMI
Java RMIJava RMI
Java RMI
 
Sockets
SocketsSockets
Sockets
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Support cours angular
Support cours angularSupport cours angular
Support cours angular
 
DART.pptx
DART.pptxDART.pptx
DART.pptx
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
Chp4 - Diagramme de Séquence
Chp4 - Diagramme de SéquenceChp4 - Diagramme de Séquence
Chp4 - Diagramme de Séquence
 
Angular Avancé
Angular AvancéAngular Avancé
Angular Avancé
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 
TP2 RMI
TP2 RMITP2 RMI
TP2 RMI
 
Formation JAVA/J2EE
Formation JAVA/J2EEFormation JAVA/J2EE
Formation JAVA/J2EE
 
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
 
Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)Développement d'un site web de E-Commerce avec PHP (Première Partie)
Développement d'un site web de E-Commerce avec PHP (Première Partie)
 
Les socket ing1_issat
Les socket ing1_issatLes socket ing1_issat
Les socket ing1_issat
 

Destacado

Ebook matlab
Ebook matlabEbook matlab
Ebook matlab
N NASRI
 
Passive reporting 2
Passive reporting 2Passive reporting 2
Passive reporting 2
englishbites
 
Debutermatlab
DebutermatlabDebutermatlab
Debutermatlab
nejmzad
 
Traitement d'image
Traitement d'imageTraitement d'image
Traitement d'image
Anissa Teyeb
 
Guide pratique optimisation des stocks v1 0
Guide pratique optimisation des stocks v1 0Guide pratique optimisation des stocks v1 0
Guide pratique optimisation des stocks v1 0
mariatayssf
 

Destacado (20)

Chat application in java using swing and socket programming.
Chat application in java using swing and socket programming.Chat application in java using swing and socket programming.
Chat application in java using swing and socket programming.
 
Chat application
Chat applicationChat application
Chat application
 
02 java-socket
02 java-socket02 java-socket
02 java-socket
 
Théorie Des Graphes
Théorie Des GraphesThéorie Des Graphes
Théorie Des Graphes
 
Ebook matlab
Ebook matlabEbook matlab
Ebook matlab
 
Passive reporting 2
Passive reporting 2Passive reporting 2
Passive reporting 2
 
Les nouveautés de asp.net mvc 3
Les nouveautés de asp.net mvc 3Les nouveautés de asp.net mvc 3
Les nouveautés de asp.net mvc 3
 
Les collections en JAVA
Les collections en JAVALes collections en JAVA
Les collections en JAVA
 
Introduction aux-sockets
Introduction aux-socketsIntroduction aux-sockets
Introduction aux-sockets
 
Practice lesson 2
Practice lesson 2Practice lesson 2
Practice lesson 2
 
Debutermatlab
DebutermatlabDebutermatlab
Debutermatlab
 
Le Réseau et Java
Le Réseau et JavaLe Réseau et Java
Le Réseau et Java
 
Grammar rules
Grammar rulesGrammar rules
Grammar rules
 
Multi user chat system using java
Multi user chat system using javaMulti user chat system using java
Multi user chat system using java
 
Traitement d'image sous Matlab
Traitement d'image sous Matlab  Traitement d'image sous Matlab
Traitement d'image sous Matlab
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
 
Introduction au traitement d'images
Introduction au traitement d'imagesIntroduction au traitement d'images
Introduction au traitement d'images
 
Traitement d'image
Traitement d'imageTraitement d'image
Traitement d'image
 
Alphorm.com Formation Excel 2016 Expert I - partie 1
Alphorm.com Formation Excel 2016 Expert I - partie 1Alphorm.com Formation Excel 2016 Expert I - partie 1
Alphorm.com Formation Excel 2016 Expert I - partie 1
 
Guide pratique optimisation des stocks v1 0
Guide pratique optimisation des stocks v1 0Guide pratique optimisation des stocks v1 0
Guide pratique optimisation des stocks v1 0
 

Similar a Rapport Sockets en Java

173544 introduction-aux-sockets
173544 introduction-aux-sockets173544 introduction-aux-sockets
173544 introduction-aux-sockets
naimanaima1
 
mise en place d'un système de classes virtuelles utilisant le webRTC + openfi...
mise en place d'un système de classes virtuelles utilisant le webRTC + openfi...mise en place d'un système de classes virtuelles utilisant le webRTC + openfi...
mise en place d'un système de classes virtuelles utilisant le webRTC + openfi...
Bassirou Dime
 
AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...
AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...
AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...
Khadidja BOUKREDIMI
 
Android VoIP/SIP Softphone
Android VoIP/SIP SoftphoneAndroid VoIP/SIP Softphone
Android VoIP/SIP Softphone
Hamza Lazaar
 

Similar a Rapport Sockets en Java (20)

173544 introduction-aux-sockets
173544 introduction-aux-sockets173544 introduction-aux-sockets
173544 introduction-aux-sockets
 
8-socket.pdf
8-socket.pdf8-socket.pdf
8-socket.pdf
 
Securisation des web services soap contre les attaques par injection
Securisation des web services soap contre les attaques par injectionSecurisation des web services soap contre les attaques par injection
Securisation des web services soap contre les attaques par injection
 
Socket tcp ip client server on langace c
Socket tcp ip client server on langace c Socket tcp ip client server on langace c
Socket tcp ip client server on langace c
 
Rapport Projet Application Web De Domotique Arduino - Liotard Roulleau
Rapport Projet Application Web De Domotique Arduino - Liotard RoulleauRapport Projet Application Web De Domotique Arduino - Liotard Roulleau
Rapport Projet Application Web De Domotique Arduino - Liotard Roulleau
 
COUPLAGE ENTRE Asterisk et OpenIMSCore
COUPLAGE ENTRE Asterisk et OpenIMSCoreCOUPLAGE ENTRE Asterisk et OpenIMSCore
COUPLAGE ENTRE Asterisk et OpenIMSCore
 
Projet réalisé par ameny Khedhira & Arij Mekki
Projet réalisé par  ameny Khedhira & Arij MekkiProjet réalisé par  ameny Khedhira & Arij Mekki
Projet réalisé par ameny Khedhira & Arij Mekki
 
Les sockets.pptx
Les sockets.pptxLes sockets.pptx
Les sockets.pptx
 
Bah mamadou hady
Bah mamadou hadyBah mamadou hady
Bah mamadou hady
 
mise en place d'un système de classes virtuelles utilisant le webRTC + openfi...
mise en place d'un système de classes virtuelles utilisant le webRTC + openfi...mise en place d'un système de classes virtuelles utilisant le webRTC + openfi...
mise en place d'un système de classes virtuelles utilisant le webRTC + openfi...
 
Reseaux
ReseauxReseaux
Reseaux
 
Ms es 70-291_1.0_fr
Ms es 70-291_1.0_frMs es 70-291_1.0_fr
Ms es 70-291_1.0_fr
 
Twido guide de programmation
Twido guide de programmationTwido guide de programmation
Twido guide de programmation
 
Contributions aux environnements de développement de services de télécoms da...
Contributions aux environnements de développement de  services de télécoms da...Contributions aux environnements de développement de  services de télécoms da...
Contributions aux environnements de développement de services de télécoms da...
 
AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...
AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...
AUTOMATISATION DU DEPLOIEMENT ET DE LA GESTION DES RESEAUX VIRTUELS DANS LE C...
 
Creation de cluster (Master et deux slave ) nfs, htcondor, mpi
Creation de cluster (Master et deux slave ) nfs, htcondor, mpiCreation de cluster (Master et deux slave ) nfs, htcondor, mpi
Creation de cluster (Master et deux slave ) nfs, htcondor, mpi
 
Projet de-recherche-Tuteuré
Projet de-recherche-TuteuréProjet de-recherche-Tuteuré
Projet de-recherche-Tuteuré
 
vanderpypendaniel_msc
vanderpypendaniel_mscvanderpypendaniel_msc
vanderpypendaniel_msc
 
TD1.pdf
TD1.pdfTD1.pdf
TD1.pdf
 
Android VoIP/SIP Softphone
Android VoIP/SIP SoftphoneAndroid VoIP/SIP Softphone
Android VoIP/SIP Softphone
 

Más de Soukaina Boujadi

Open erp le reporting avec jasper reports
Open erp  le reporting avec jasper reportsOpen erp  le reporting avec jasper reports
Open erp le reporting avec jasper reports
Soukaina Boujadi
 

Más de Soukaina Boujadi (15)

Rapport des Travaux Pratiques UNIX
Rapport des Travaux Pratiques UNIXRapport des Travaux Pratiques UNIX
Rapport des Travaux Pratiques UNIX
 
Rapport XMI To SVG
Rapport XMI To SVGRapport XMI To SVG
Rapport XMI To SVG
 
Conformiq
ConformiqConformiq
Conformiq
 
Composants hardware du mainframe
Composants hardware du mainframeComposants hardware du mainframe
Composants hardware du mainframe
 
Open erp le reporting avec jasper reports
Open erp  le reporting avec jasper reportsOpen erp  le reporting avec jasper reports
Open erp le reporting avec jasper reports
 
Comment lancer une entreprise
Comment lancer une entrepriseComment lancer une entreprise
Comment lancer une entreprise
 
Rapport comment lancer une entreprise
Rapport comment lancer une entrepriseRapport comment lancer une entreprise
Rapport comment lancer une entreprise
 
Présentation open bravo
Présentation open bravoPrésentation open bravo
Présentation open bravo
 
Sauvegardes de base de données
Sauvegardes de base de donnéesSauvegardes de base de données
Sauvegardes de base de données
 
Concepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupérationConcepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupération
 
Rapport tp3 j2ee
Rapport tp3 j2eeRapport tp3 j2ee
Rapport tp3 j2ee
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
 
Rapport tp1 j2ee
Rapport tp1 j2eeRapport tp1 j2ee
Rapport tp1 j2ee
 
Sécurité des réseaux sans fil WIFI
Sécurité des réseaux sans fil WIFISécurité des réseaux sans fil WIFI
Sécurité des réseaux sans fil WIFI
 
Programmation shell
Programmation shellProgrammation shell
Programmation shell
 

Último

Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
ssuserc72852
 
Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
AmgdoulHatim
 
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptxCopie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
ikospam0
 

Último (20)

Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
Formation qhse - GIASE saqit_105135.pptx
Formation qhse - GIASE saqit_105135.pptxFormation qhse - GIASE saqit_105135.pptx
Formation qhse - GIASE saqit_105135.pptx
 
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
 
Chapitre 2 du cours de JavaScript. Bon Cours
Chapitre 2 du cours de JavaScript. Bon CoursChapitre 2 du cours de JavaScript. Bon Cours
Chapitre 2 du cours de JavaScript. Bon Cours
 
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptxIntégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
 
L application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptxL application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptx
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Les roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptxLes roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptx
 
les_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhkles_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhk
 
La mondialisation avantages et inconvénients
La mondialisation avantages et inconvénientsLa mondialisation avantages et inconvénients
La mondialisation avantages et inconvénients
 
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptxCopie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
Copie de Engineering Software Marketing Plan by Slidesgo.pptx.pptx
 
L'expression du but : fiche et exercices niveau C1 FLE
L'expression du but : fiche et exercices  niveau C1 FLEL'expression du but : fiche et exercices  niveau C1 FLE
L'expression du but : fiche et exercices niveau C1 FLE
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projetFormation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
 
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
 
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANKRAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 

Rapport Sockets en Java

  • 1. Master Spécialisé Qualité du Logiciel Rapport de projet Sockets en Java Réalisé Par : Soukaina NAJIHI Meryem ABOUNASR Soukaina BOUJADI Encadré Par : Mr. ELANSARI Année Universitaire 2013-2014
  • 2. Remerciement Nous souhaitons adresser nos remerciements les plus sincères à notre professeur M ELANSARI qui nous a toujours aidé et apporté ses directives et remarques pertinentes .Nous le remercions encore pour l’occasion qu’il nous a donné pour affronter ce monde merveille d’Unix. Année Universitaire 2013-2014 2
  • 3. Table des matières Remerciement.............................................................................................................................. 2 Table des matières ....................................................................................................................... 3 CHAPITRE 1: Introduction au sockets ................................................................................... 5 1.1 Problème ....................................................................................................................................... 6 1.2 Comment ? -> Interface TCP/IP APPLICATION .......................................................................... 6 1.3 Les adresses IP en Java .................................................................................................................. 8 CHAPITRE 2: Qu'est-ce qu'un socket ? ........................................................................ 10 2.1 Définition du socket .................................................................................................................... 11 2.2 Sockets TCP/UDP ......................................................................................................................... 12 CHAPITRE 3 : Socket en mode connecté ..................................................................... 13 3.1 Pour mieux comprendre : exemple appel téléphonique ............................................................ 14 3.1.1 accueil téléphonique d’une entreprise ................................................................................ 14 3.1.2 Comme le téléphone ........................................................................................................... 14 3.1.3 Installation du téléphone .................................................................................................... 15 3.1.4 La conversation téléphonique .............................................................................................. 16 3.1.5 Raccrocher le téléphone ....................................................................................................... 16 3.1.6 Overview ............................................................................................................................... 17 3.2 Socket TCP - Déroulement ......................................................................................................... 17 3.3 Implémentation : Socket TCP ...................................................................................................... 18 3.4 Gestion du parallélisme sur le serveur ........................................................................................ 23 3.4.1 Serveur Multi-Threads ......................................................................................................... 23 3.4.2 Déroulement en multi-thread .............................................................................................. 24 3.4.3 Un serveur TCP/IP multiclients ........................................................................................... 25 3.4.4 Implémentation d’un serveur multi-thread ......................................................................... 26 CHAPITRE 4 : Socket en mode non connecté .............................................................. 31 4.1 La classe DatagramPacket ........................................................................................................... 32 4.2 La classe DatagramSocket .......................................................................................................... 34 4.3 Socket UDP:Déroulement ............................................................................................................ 36 4.4 Implémentation : Socket UDP ..................................................................................................... 37 CHAPITRE 5 : Comparaison socket JAVA ET C ............................................................ 40 Année Universitaire 2013-2014 3
  • 4. 5.1 En mode Connecté ...................................................................................................................... 41 5.1.1 Côté serveur ......................................................................................................................... 41 5.1.2 Client ..................................................................................................................................... 43 5.1.3 Récpitulatif ........................................................................................................................... 43 5.2 En mode déconnecté ................................................................................................................... 45 5.2.1 Côté serveur et côté Client ................................................................................................... 45 5.2.2 Récapitulatif ......................................................................................................................... 45 Année Universitaire 2013-2014 4
  • 5. CHAPITRE 1: Introduction au sockets Année Universitaire 2013-2014 5
  • 6. 1.1 Problème La communication via un LAN ou WAN possède de multiples applications : * client/serveur Internet, * commande à distance de différents équipements : robot industriel, robot de chirurgie, commande d’équipement, … * gestion d’appareils de mesure via un LAN, Prenons un exemple : pilotage d’une installation de chauffage à distance. On souhaite gérer une installation de chauffage à distance soit par : a) un ordinateur ; b) un téléphone portable GSM ; 1.2 Comment ? -> Interface TCP/IP APPLICATION Après avoir étudié les protocoles TCP/IP, il reste à voir le problème de l’interface entre les programmes d’application et les logiciels de la pile TCP/IP, il existe différentes solutions pour résoudre ce problème parmi eux on trouve les sockets. Année Universitaire 2013-2014 6
  • 7. Le schéma ci-dessous permet de faire la correspondance entre les couches de la modélisation contemporaine et celles de la représentation macroscopique d'un système d'exploitation. Le logiciel correspondant aux protocoles allant de la couche physique jusqu'à la couche transport fait partie du sous-système réseau du noyau du système d'exploitation. Le programme utilisateur est lancé à partir de la couche Shell et est exécuté au niveau application. L'utilisation de sockets revient à ouvrir un canal de communication entre la couche application et la couche transport. Les sockets servent à communiquer entre deux hôtes appelés Client / Serveur à l'aide d'une adresse IP et d'un port ; ces sockets permettront de gérer des flux entrant et sortant afin d'assurer une communication entre les deux (le client et le serveur), soit de manière fiable à l'aide du protocole TCP/IP, soit non fiable mais plus rapide avec le protocole UDP. Voici ce qu'on peut réaliser à l'aide des sockets :  des jeux en ligne ;  des systèmes distribués ;  des espaces messengers comme MSN Messenger, Yahoo Messenger, … ;  des applications comme BitComet permettant de gérer les fichiers .torrent que vous connaissez ;  et bien d'autres choses. Année Universitaire 2013-2014 7
  • 8. 1.3 Les adresses IP en Java  Représentés par la classe java.net.InetAddress Contient 2 champs :  hostname : Stocke le nom de l’hôte (ex: www.monsite.com)  address : Stocke l’adresse IP de l’hôte  Pas de constructeurs publics.  Pour créer une InetAddress, il faut utiliser une des méthodes suivantes : public static InetAddress getByName(String nom_hote) public static InetAddress [] getAllByName(String nom_hote) public static InetAddress getLocalHost()  public static InetAddress getByName (String nom_hote) Cette méthode utilise le DNS pour renvoyer une instance de la classe InetAddress contenant l’adresse IP de la machine dont le nom est passé en paramètre En cas d’erreur, lève l’exception UnknownHostException Exemple : InetAddress adr = InetAddress.getbyName(“www.site.com“);  public static InetAddress getByName [] (String nom_hote)  Renvoie toutes les adresses IP de la machine (dont le nom est passé en paramètre) Année Universitaire 2013-2014 8
  • 9.  En cas d’erreur, lève l’exception UnknownHostException  public static InetAddress getLocalHost ()  Renvoie une instance de la classe InetAddress  contenant l’adresse IP de la machine locale  En cas d’erreur, lève l’exception UnknownHostException Équivalent à :  getByName(null) , getByName("localhost")  public String getHostName ()  Renvoie la chaine de caractères contenant le nom de la machine locale  Renvoie l’adresse IP de la machine si elle n’a pas de nom  public byte [] getAddress ()  Renvoie l’adresse IP de la machine locale sous forme de tableau d’octets rangés selon l’ordre réseau . Le premier octet contient l’octet de poids fort de l’adresse Année Universitaire 2013-2014 9
  • 10. CHAPITRE 2: Qu'est-ce qu'un socket ? Année Universitaire 2013-2014 10
  • 11. 2.1 Définition du socket Un socket est un point de terminaison d'une communication bidirectionnelle, c'est-à-dire entre un client et un serveur en cours d'exécution sur un réseau donné. Les deux sont liés par un même numéro de port TCP de sorte que la couche puisse identifier la demande de partage de données. Un serveur fonctionne sur une machine bien définie et est lié à un numéro de port spécifique. Le serveur se met simplement à l'écoute d'un client, qui demande une connexion. Il existe au moins deux grands modes de communication :  par paquet (datagram) : dans ce mode on est pas connecté  en flux (stream) : dans ce mode on est connecté Année Universitaire 2013-2014 11
  • 12. 2.2 Sockets TCP/UDP Dans le mode flux (Mode Connecté) - les informations sont reçues dans l’ordre exact de leur émission - il n’y a pas de perte . - Ouverture d'une liaison, suite d'échanges, fermeture de la liaison. - Le serveur préserve son état entre deux requêtes. - Garanties de TCP : ordre, contrôle de flux, fiabilité. - Adapté aux échanges ayant une certaine durée (plusieurs messages). - inconvénient : nécessite l’établissement d’une connexion et consomme donc des ressources pour sa gestion Dans le mode paquet (Mode non connecté) - il n’existe pas d’ordre dans la délivrance des paquets - un paquet posté en premier peut arriver en dernier - il n’existe pas non plus de fiabilité - un paquet envoyé peut être perdu - Les requêtes successives sont indépendantes. - Pas de préservation de l'état entre les requêtes. - Le client doit indiquer son adresse à chaque requête (pas de liaison permanente). - Pas de garanties particulières. - Adapté aux échanges brefs (réponse en 1 message). - intérêt : souple et léger... Année Universitaire 2013-2014 12
  • 13. CHAPITRE 3 : Socket en mode connecté Année Universitaire 2013-2014 13
  • 14. 3.1 Pour mieux comprendre : exemple appel téléphonique 3.1.1 accueil téléphonique d’une entreprise Les entreprises disposent généralement d’un standard téléphonique chargé d’aiguiller les appels vers le bon destinataire : 3.1.2 Comme le téléphone Les sockets sont la méthode BSD (inventée par l’Université de Berkeley) pour réaliser des communications entre processus (IPC, Inter Processus Communications). C’est-à-dire qu’un socket permet à un processus de communiquer avec un autre situé à distance sur le même LAN, tout comme une ligne de téléphone permet à deux personnes de se parler. L’analogie avec le réseau téléphonique est excellente et nous allons l’utiliser au long de ce petit guide. Année Universitaire 2013-2014 14
  • 15. 3.1.3 Installation du téléphone Pour recevoir des appels téléphoniques, il nous faut installer le téléphone. De même nous devons créer un socket qui attendra des connexions. Cela se fait en plusieurs étapes : a) Installation d’une nouvelle ligne ; l’instanciation de la classe ServerSocket, qui met en oeuvre une sorte de port que les serveurs peuvent utiliser pour écouter et accepter les connexions des clients. b) Après la création, nous devons indiquer à notre socket quel port écouter, exactement comme le numéro de téléphone que vous obtenez, vous permettra de recevoir des appels. C’est le rôle du constructeur de la classe ServerSocket qui « attache » le socket serveur à un port ; Ce qui nous donne : ServerSocket socketserver = new ServerSocket(numero_port); c) Pendant le traitement d’une connexion. Nous avons la possibilité d’indiquer le nombre maximum de requêtes possibles. Il existe deux autres constructeurs ; l'un a deux paramètres, le premier est bien sûr le numéro de port et le nombre total de connexion simultanées acceptées, voyez : ServerSocket socketserver = new ServerSocket(numer_port,nbr_max); nbr_max est le nombre maximal de connexions traitées simultanément. Par exemple au-delà de cinq tentatives de connexion consécutives autorisées, les connexions sont refusées. Pour le second constructeur il suffit de spécifier l'adresse locale du serveur. ServerSocket socketserver = new ServerSocket(numer_port,nbr_max,adresse_locale); d) Après la création de socket permettant de recevoir des appels, il faut répondre aux demandes de connexion. C’est le rôle de la fonction Année Universitaire 2013-2014 15
  • 16. accept (), qui est analogue à l’action de décrocher le combiné lorsque le téléphone sonne. Cette fonction accept () va retourner un nouvel socket, qui sera connecté à l’appelant. Socket socketduserveur = socketserver.accept(); e) Vous savez maintenant comment créer un socket qui accepte les demandes de connexion. Mais comment l’appeler ? Pour passer un appel téléphonique, vous devez avoir le téléphone. Eh bien, vous allez utiliser la fonction socket(), exactement comme pour l’établissement d’un socket qui doit attendre les connexions. Mais vous devez lui indiquez le nom de la machine sur laquelle le serveur est en exécution et le numéro de port sur lequel il écoute. Socket socket = new Socket(param1, param2) f) Il faut alors écrire une fonction rassemblant les appels systèmes ci-dessus. Cette fonction appelle un port particulier d’une certaine machine, qu’on lui passe en paramètre. 3.1.4 La conversation téléphonique Maintenant que vous disposez d’une connexion entre deux sockets, vous allez vouloir échanger des données entre les 2 machines mises en jeu (ou la même, le réseau étant transparent, il peut s’agir de processus sur le même système, peu importe !). Et là, vous allez voir la magie de la chose : on utilise les fonctions read () et write (). 3.1.5 Raccrocher le téléphone De la même façon que vous devez raccrocher le combiné téléphonique lorsque vous avez terminé votre conversation, vous devez couper la connexion entre les deux sockets lorsque tout est fini. On utilise pour cela la fonction close (). Année Universitaire 2013-2014 16
  • 17. 3.1.6 Overview 3.2 Socket TCP - Déroulement Année Universitaire 2013-2014 17
  • 18. 3.3 Implémentation : Socket TCP Le client envoie au serveur un nombre entier, le serveur le multiple par 5 et renvoie le résultat au client  Serveur.java : Exemple d’un serveur simple : Année Universitaire 2013-2014 18
  • 19. import java.io.*; import java.net.*; public class Serveur { public static void main(String[] args) { try { ServerSocket ss=new ServerSocket(1234); System.out.println("j'attend la connexion d'un client"); Socket clientSocket=ss.accept(); System.out.println("Nouveau client connecté"); System.out.println ("Génération de objet InptStream et OutputStream de la socket"); InputStream is=clientSocket.getInputStream(); OutputStream os=clientSocket.getOutputStream(); System.out.println("J'attend un nombre (1 octet)!"); int nb=is.read(); System.out.println("J'envoie la réponse"); os.write(nb*5); System.out.println("Déconnexion du client"); clientSocket.close(); } catch (IOException e) { e.printStackTrace(); }}} 1) Client.java : Exemple d’un client simple Année Universitaire 2013-2014 19
  • 20. import java.io.*; import java.net.*; import java.util.Scanner; public class Client { public static void main(String[] args) { try { System.out.println("Créer une connexion au serveur:"); Socket clientSocket=new Socket("localhost", 123); System.out.println("Génération de objet InptStream et OutputStream de la socket"); InputStream is=clientSocket.getInputStream(); OutputStream os=clientSocket.getOutputStream(); System.out.println("Lire un nombre au clavier NB="); Scanner clavier=new Scanner(System.in); int nb=clavier.nextInt(); System.out.println("Envoyer le nombre "+nb+" au serveur"); os.write(nb); System.out.println("Attendre la réponse du serveur:"); int rep=is.read(); System.out.println("La réponse est :"+rep); } catch (Exception e) { e.printStackTrace(); }}} Année Universitaire 2013-2014 20
  • 21.  Lancement du serveur : Après le lancement du serveur la console affiche le message suivant J'attend la connexion d’un client Console Serveur  Lancement du client : J’attend la connexion d’un client Nouveau client connecté Génération de objet InptStream et OutputStream de la socket J’attend un nombre (1 octet) ! Console Serveur Créer une connexion au serveur: Génération de objet InptStream et OutputStream de la socket Lire un nombre au clavier NB=_ Console Client  Saisir un nombre par le client et l’envoyer au serveur : Année Universitaire 2013-2014 21
  • 22. J’attend la connexion d’un client Nouveau client connecté Génération de objet InptStream et OutputStream de la socket J’attend un nombre (1 octet) ! J’envoie la réponse Déconnexion du client Console Serveur Créer une connexion au serveur: Génération de objet InptStream et OutputStream de la socket Lire un nombre au clavier NB=12 Envoyer le nombre 12 au serveur Attendre la réponse du serveur La réponse est : 60 Console Client Année Universitaire 2013-2014 22
  • 23. 3.4 Gestion du parallélisme sur le serveur La communication ne doit pas rester bloquée pour un client D’après ce qu’on a vu dans jusqu’à maintenant, un seul processus serveur : S’il y a des clients multiples, ils sont traités en séquence (les requêtes sont conservées dans une file d’attente associée à la socket serveur) La longueur max de cette file d’attente peut être spécifiée lors de la création de la socket serveur. Valeur par défaut : 50. Mais si l ' on veut que plus que deux puissent communiquer entre eux à la fois , comment faire ? D'où la nécessité d'utiliser les Threads. 3.4.1 Serveur Multi-Threads Pour qu’un serveur puisse communiquer avec plusieurs client en même temps, il faut que: - Le serveur puisse attendre une connexion à tout moment. - Pour chaque connexion, il faut créer un nouveau thread associé à la socket du client connecté (donc à l’exécution de accept()), puis attendre à nouveau une nouvelle connexion - Le thread créé doit s’occuper des opérations d’entrées-sorties (read/write) pour communiquer avec le client indépendamment des autres activités du serveur (Une socket service client différente est créé pour chaque client). - Le thread veilleur se remet ensuite en attente Année Universitaire 2013-2014 23
  • 24. Connections multithread 3.4.2 Déroulement en multi-thread Année Universitaire 2013-2014 24
  • 25. 3.4.3 Un serveur TCP/IP multiclients class Service implements Runnable { private Socket s; Service (Socket _s) {s=_s; } void run() { //bla bla bla s.close(); } } while (true) { accepter la connexion d’un nouveau client et créer une socket service client; créer un thread pour interagir avec ce client sur la nouvelle socket service client ; } .... ServerSocket socketAttente; SocketAttente = new ServerSocket(7777); while (true) { Socket socket=socketAttente.accept(); // Connexion établie // La communication est désormais possible Service s=new Service(socket); Thread t = new Thread(s); t.start(); } SocketAttente.close(); .... Année Universitaire 2013-2014 25
  • 26. le serveur utilise une classe Service implémentant l’interface Runnable(thread) pour gérer les échanges de données en tâche de fond. C’est ce thread qui réalise le service demandé 3.4.4 Implémentation d’un serveur multi-thread Le serveur se compose au minimum par deux classes :  ServeurMultiThread.java : serveur principal : Année Universitaire 2013-2014 26
  • 27. import java.io.*; import java.net.*; public class ServeurMultiThread extends Thread { int nbClients=0; // pour compter le nombre de clients connectés public void run(){ try { System.out.println("J'attend une connexion"); ServerSocket ss=new ServerSocket(4321); while(true){ Socket s=ss.accept(); ++nbClients; new ServiceClient(s,nbClients).start(); } } catch (IOException e) {e.printStackTrace();} } // Fin de la méthode run public static void main(String[] args) { new ServeurMultiThread().start(); }} Année Universitaire 2013-2014 27
  • 28.  La classe qui gère les entrées-sorties : ServiceClient.java : import java.io.*; import java.net.*; public class ServiceClient extends Thread { Socket client; int numero; public ServiceClient(Socket s,int num){client=s;numero=num; } public void run(){ try { BufferedReader in=new BufferedReader( new InputStreamReader(client.getInputStream())); PrintWriter out=new PrintWriter(client.getOutputStream(),true); System.out.println("Client Num "+numero); out.println("Vous etes le client num "+numero); while(true){ String s=in.readLine(); out.println("Votre commande contient "+ s.length()+" caractères"); } } catch (IOException e) { e.printStackTrace();} } } Année Universitaire 2013-2014 28
  • 29.  Lancement du serveur multithreads : Après le lancement du serveur la console affiche le message suivant J'attend une connexion Console Serveur  Lancement des client : J'attend une connexion J'attend une connexion Client Num 1 J'attend une connexion Client Num 2 Vous etes le client num 1 Vous etes le client num 2 Console Serveur Client 1 Client 2 Année Universitaire 2013-2014 29
  • 30.  Communication entre les clients et le serveur : J'attend une connexion J'attend une connexion Client Num 1 J'attend une connexion Client Num 2 Vous etes le client num 1 Soukaina Votre commande contient 8 caractères Meryem Votre commande contient 6 caractères Console Serveur Vous etes le client num 2 MQL Votre commande contient 3 caractères UNIX Votre commande contient 4 caractères Client 1 Client 2 Année Universitaire 2013-2014 30
  • 31. CHAPITRE 4 : Socket en mode non connecté Année Universitaire 2013-2014 31
  • 32. Dans java.net on trouve les classes : •DatagramSocket •DatagramPacket 4.1 La classe DatagramPacket Cette classe permet de créer des objets qui contiendront les données envoyées ou reçues ainsi que l'adresse de destination ou de provenance du datagramme. Deux constructeurs sont disponibles, un pour les paquets à recevoir, l'autre pour les paquets à envoyer.  public DatagramPacket(byte buffer[], int taille) Construit un objet pour recevoir un datagramme. Le paramètre buffer correspond à la zone où doit être stocké le datagramme reçu et le paramètre taille correspond à la taille maximale des datagrammes à recevoir. byte[]buffer : tableau d’octets permettant la réception des données ATTENTION : Si la taille du tableau est insuffisante, les données seront tronquées Exemple byte[] tampon = new byte[1024]; DatagramPacket datagramme = new DatagramPacket(tampon, tampon.length); Année Universitaire 2013-2014 32
  • 33.  public DatagramPacket(byte buffer[], int taille, InetAddress adresse, int port) Construit un objet pour envoyer un datagramme. Le paramètre buffer correspond à la zone où est stocké le datagramme à envoyer, le paramètre taille correspond à la taille du datagramme à envoyer, adresse correspond à l'adresse de la machine à qui envoyer le datagramme et port sur quel port UDP. Exemple String message = “coucou !!! “ ; byte[] tampon = message.getBytes(); InetAddress adresse= InetAddress.getByName(“moncorrepsondant.fr“); DatagramPacket datagramme = new DatagramPacket(tampon, tampon.length, adresse, 45848); Des méthodes sont disponibles pour manipuler de tels objets :  public synchronized InetAddress getAddress () Retourne l'adresse stockée dans le paquet.  public synchronized int getPort () Retourne le port stocké dans le paquet.  public synchronized byte[] getData () Retourne les données stockées dans le paquet.  public synchronized int getLength () Retourne la taille des données stockées dans le paquet.  public synchronized void setAddress(InetAddress iaddr) Modifie ou affecte l'adresse de destination.  public synchronized void setPort(int iport) Année Universitaire 2013-2014 33
  • 34. Modifie ou affecte le port de destination.  public synchronized void setData(byte ibuf[]) Modifie ou affecte la référence de la zone contenant les données.  public synchronized void setLength(int ilength) Modifie ou affecte la taille de la zone contenant les données. 4.2 La classe DatagramSocket Cette classe permet de créer des sockets UDP qui permettent d'envoyer et de recevoir des datagrammes UDP. Avant toute communication en mode UDP il est nécessaire de créer une socket aussi bien du coté client que du coté serveur. Pour cela Java propose trois constructeurs :  public DatagramSocket () throws SocketException Crée un objet de type socket et l'attache à un port disponible de la machine locale. Ce constructeur doit être utilisé dans les clients pour lesquels le port d'attachement n'a pas besoin d'être connu. Remarque : pas d’arguments pour le constructeur car toutes les informations se trouvent dans le paquet envoyé.  public DatagramSocket (int port) throws SocketException Crée un objet de type socket et l'attache au port UDP local passé en paramètre. En particulier, ce constructeur doit être utilisé dans les serveurs pour lesquels le port d'attachement a besoin d'être fixé préalablement afin qu'il soit connu des clients.  public DatagramSocket(int port, InetAddress laddr) throws SocketException Crée un objet de type socket, l'attache au port UDP local passé en paramètre et à une adresse spécifique de la machine locale. Ce constructeur n'est utile que si la machine locale dispose de plusieurs adresses Internet. Année Universitaire 2013-2014 34
  • 35. Une fois le socket (objet de type DatagramSocket) créée et attachée à un port particulier de la machine locale, il est possible d'envoyer et de recevoir des datagrammes, via cette socket, au moyen des méthodes suivantes :  public void send(DatagramPacket data) throws IOException Permet d'envoyer les données contenues dans la variable data vers la machine et le port dont les valeurs ont été préalablement spécifiées dans la variable data.  public synchronized void receive(DatagramPacket data) throws IOException Permet de recevoir un datagramme qui sera stocké dans data. Après appel, data contient les données reçues, leur taille, l'adresse de l'envoyeur ainsi que son port d'attachement. Cette méthode est bloquante tant qu'il n'y a rien à recevoir. Si le message est trop long pour être stocké, celui-ci est tronqué, et le reste est perdu. Il n'est donc pas possible de recevoir des messages dont on ne connait pas préalablement la taille.  public void close() throws IOException Même si Java ferme les DatagramSocket à la fin du programme (ou via le Garbage collect), il est DE BON USAGE de fermer EXPLICITEMENT les DatagramSockets via la méthode close une fois qu’ils ne sont plus utiles. Année Universitaire 2013-2014 35
  • 36. 4.3 Socket UDP:Déroulement  Un schéma récapitulatif Année Universitaire 2013-2014 36
  • 37. 4.4 Implémentation : Socket UDP  Server.java import java.net.*; public class Server { public static void main(String []args) { try { DatagramSocket s = new DatagramSocket(5678); byte []data = new byte[100]; System.out.println("J'attend un Client"); DatagramPacket paquet = new DatagramPacket(data,data.length); while (true) { s.receive(paquet); String st = new String(paquet.getData(),0,paquet.getLength()); System.out.print("J'ai reçu ["+st+"]"); System.out.println(" depuis la machine "+" "+ paquet.getAddress().getHostName()+" port :"+ paquet.getPort()); }} catch(Exception ex) { ex.printStackTrace(); System.exit(1); }}} Année Universitaire 2013-2014 37
  • 38.  Client.java import java.net.*; public class Client { public static void main(String []args) { try { DatagramSocket s = new DatagramSocket(); byte []data = args[0].getBytes(); InetSocketAddress sa = new InetSocketAddress("localhost",5678); System.out.println("le paquet est créé !"); DatagramPacket paquet = new DatagramPacket(data,data.length,sa); System.out.println("le paquet est envoyé"); s.send(paquet); } catch(Exception ex) { ex.printStackTrace(); System.exit(1); }}} Année Universitaire 2013-2014 38
  • 39.  Lancement du serveur : J’attend un client  Lancement du client : En passant une chaine de caractère ‘Abounasr Najihi Boujadi’ J’attend un client J'ai reçu [Abounasr Najihi Boujadi] depuis la machine Adresse 127.0.0.1 port :5888 Le paquet est créé ! Le paquet est envoyé ! Console Serveur Console Client Année Universitaire 2013-2014 39
  • 40. CHAPITRE 5 : Comparaison socket JAVA ET C Année Universitaire 2013-2014 40
  • 41. le principe des sockets reste le même dans les deux langages, la comparaison sera faite au niveau des syntaxes du code utilisé dans chaque langage : 5.1 En mode Connecté 5.1.1 Côté serveur JAVA En Unix /C - Créer un Socket - L’Attacher à un port et adresse - Lui permettre de scruter et stocker les demandes de connexions entrantes avant acceptation - paramétrer la taille de la FIFO des requêtes Classe ServerSocket Trois constructeurs possibles : - numéro_port (obligatoire) - Et taille maximale FIFO - Et Adresse IP PS : cette classe fait les 3 taches de langage C socket()+bind()+listen() - socket() //création en mode STREAM - bind() //assignation numéro de port et adresse IP - listen() // taille maximale FIFO - Le processus doit être bloqué tant qu’aucune demande de connexion ne lui parvient sur la socket générique d’écoute : = => fonction bloquante - L’acceptation consiste à considérer positivement une demande reçue et à Classe ServerSocket Méthode accept // retourne un objet Socket accept // retourne l’identificateur de la nouvelle créée ainsi que les caractéristiques du client distant Année Universitaire 2013-2014 41
  • 42. créer localement une socket spécifique dédiée à supporter l’échange de données sur cette connexion particulière ==> Cette socket représente l’extrémité « serveur » de la connexion TCP initiée par un « client » distant. - EMISSION : Revient à Ecrire/Envoyer un message (x octets) sur la connexion - RECEPTION : Revient à Lire/Recevoir un message (x octets) sur la connexion Classe Socket - Emission : méthode getInputStream Réception : méthode getOuputStream - Emission : primitives send ou write - Réception : primitives recv ou read Année Universitaire 2013-2014 42
  • 43. 5.1.2 Client JAVA En Unix /C - Créer un Socket - L’attacher à un port et adresse - L’utiliser pour demander l’établissement d’une connexion TCP avec un processus distant « répondant » Quatre constructeurs possibles - Adresse IP ou nom_host distant ET numéro_port distant (obligatoires) - Et Adresse IP ou nom_host local ET numéro_port local PS : cette classe fait les 3 taches de langage C socket()+bind()+connect() - socket() // création en mode STREAM - bind() // assignation numéro de port et adresse IP - connect() //permet à un client de se connecter à le serveur. EMISSION : Revient à Ecrire/Envoyer un message (x octets) sur la connexion RECEPTION : Revient à Lire/Recevoir un message (x octets) sur la connexion Classe Socket - Emission : méthode getInputStream - Réception : méthode getOuputStream Emission : primitives send ou write Réception : primitives recv ou read 5.1.3 Récpitulatif  Version Unix/) : Année Universitaire 2013-2014 43
  • 44.  Version JAVA : Année Universitaire 2013-2014 44
  • 45. 5.2 En mode déconnecté 5.2.1 Côté serveur et côté Client JAVA En Unix /C - Créer une socket localement - Numéro de port prédéfini côté « serveur » Créer un socket UDP avec - DatagramSocket (int port) :Côté serveur - DatagramSocket() : côté client Créer le socket UDP avec la fonction socket () + La fonction bind() pour l’attacher à un port Transfert de données (des deux côtés) : EMISSION : Envoyer X octets vers une socket distante dont on précise les caractéristiques RECEPTION : Recevoir X octets provenant d’une socket distante dont on récupère les caractéristiques pour en déterminer l’origine ==> fonction bloquante Classe SocketDatagram - Emission : méthode send - Réception : méthode receive Classe DatagramPacket - Constructeurs pour l’envoi - Constructeurs pour la réception Emission : primitives sendto Réception : primitives recvfrom 5.2.2 Récapitulatif  Version Unix/C : Année Universitaire 2013-2014 45
  • 46.  Version Java : Année Universitaire 2013-2014 46