SlideShare une entreprise Scribd logo
1  sur  50
Télécharger pour lire hors ligne
REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE
MINISTERE D’ENSEIGNEMENT SUPERIEUR
ET DE LA RECHERCHE SCIENTIFIQUE
Faculté Des Sciences Et De L’ingénierie
Institue De Génie Informatique
Module Réseau et Communication
4 éme
Année Informatique
Réalisé par :
BENYAMMI Bachir
HASSANI Mustapha
OULD BAHAMMOU Abdelaziz
Encadré par :
Mr. BOUKHELKHAL Ahmed
Année Universitaire
2006-2007
Sommaire Programmation réseau en JAVA
Sommaire
Sommaire général :
Introduction 02
I - Réseaux : Notions de bases 03
1. L'architecture Client / Serveur 03
2. Modèle OSI 04
3. Le modèle TCP/IP 04
4. Le protocole TCP 05
5. Le protocole UDP 05
6. Le protocole IP 06
7. Les ports 06
8. Les Sockets 06
9. La diffusion 07
10. L'accès aux ressources via une URL 08
II - Introduction au JAVA 09
1. Historique 09
2. Les Caractéristiques de Java 10
2.1 La Simplicité offerte par java 10
2.2 Conçu pour fonctionner sur le Web 11
2.3 Un langage indépendant de toute plate-forme 12
2.3.1 Programmes multi plates formes Java 12
2.3.2 Bytecode et Compilation native 13
2.3.3 La machine virtuelle Java 14
2.4 Java est totalement adapté au réseau 15
2.5 Java est multitâche 16
2.6 Java permet l'exécution dynamique 16
2.7 Composants logiciels réutilisables 16
2.8 Java assure la Sécurité 16
2.9 Java est robuste 16
2.10 Les JSP 17
2.11 Les servlets 18
2.12 La technologie RMI 19
3. Généralité sur Java 20
3.1 Les avantages de Java 20
3.2 Comparer le langage Java 20
4. Le Java Développement Kit (JDK) 21
5. Les techniques de base de programmation en Java 22
5.1 La compilation d'un code source 22
5.2 L'exécution d'un programme et d'une applet 23
Sommaire Programmation réseau en JAVA
III - JAVA et la programmation réseau 24
Le paquet java.net 25
1. Les adresses Internet et JAVA 25
1.1 La classe InetAddress 25
1.2 La classe NetworkInterface 27
2. La communication par des sockets et JAVA 28
2.1 Utilisation du protocole TCP 28
a. La classe SocketServer 29
b. La classe Socket 32
2.2 Utilisation du protocole UDP 34
a. La classe DatagramSocket 34
b. La classe DatagramPacket 35
c. La clase MulticastSocket 38
3. Les URLs et JAVA 40
a. La classe URL 40
b. La classe URLConnection 41
c. La classe URLEncoder 41
4. Les exceptions liées au réseau 43
Conclusion 44
Bibliographie 45
Glossaire 47
Sommaire des figures:
Fig. 1 : L'architecture Client / Serveur 03
Fig. 2 : Le modèle TCPIP 04
Fig. 3 : Communication par Sockets 07
Fig. 4 : Java permet à une personne de jouer contre un adversaire 11
Fig. 5 : Le pseudo-code de Java. 12
Fig. 6 : Java est un compilateur neutre. 13
Fig. 7 : Le bytecode Java 13
Fig. 8 : Fonctionnement de la JVM 14
Fig. 9 : Un synoptique de la machine virtuelle Java 14
Fig. 10 : L’adaptation aux réseaux de Java 15
Fig. 11 : Compilation par une commande. 23
Fig. 12 : Communication par TCP 28
Fig. 13 : Communication par UDP 34
Fig. 14 : Visualisation d'un applet dans l'AppletViewer. 43
Fig. 15 : Visualisation d'une page html dans le navigateur. 43
Introduction Programmation réseau en JAVA
2
Introduction
es réseaux informatiques représentent le noyau qui garantie le bon fonctionnement de toutes
organismes, ils influents de plus en plus notre vie courante. A cause des divers services offerts,
tel que la messagerie, les forums de discussion, les transactions bancaires, la navigation Web…
Le langage JAVA a prévu son efficacité et ça souplesse dans le développement des applications
réseaux et Internet, il est devenu indispensable pour la programmation Web.
Le but de ce mini-projet est d’avoir une connaissance globale sur le développement des applications
réseaux en JAVA, ainsi que l’utilisation des différents protocoles et les techniques de communication.
Les divers outils utilisés dans notre travail sont :
• JDK 1.6 : pour le développement.
• JRE 1.6 : pour l’exécution et le teste des programmes.
• NetBeans 5.5 : l’IDE de développement.
• 02 Machines (PC + Portable) liés entre eux.
• Visio 2003 : pour la réalisation des schémas explicatifs.
L
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Chapitre
1
Réseaux : Notions de bases
n réseau informatique est constitué d'un ensemble d'ordinateurs et de périphériques
interconnectés. Un nœud du réseau qui correspond à un ordinateur est généralement appelé
hôte
U
1. L'architecture Client / Serveur
Le mode de communication qu'un hôte établit avec un autre hôte qui fournit un service
quelconque est désigné par le terme Client/Serveur. Le processus de communication est comme suit :
• Le client lance une requête pour l'acquisition d'une ressource (Texte, Image, Son, …).
• Le serveur exécute la requête (lancement des scripts, communication avec une BDD, …).
• Le résultat de la requête (la réponse) est envoyé au client.
Fig. 1 : L'architecture Client / Serveur
3
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Dans les applications Client/Serveur; la liaison se fait généralement entre deux ordinateur, l'un des
deux joue le rôle de serveur et l'autre celui de client. Le serveur fournit quelques services, comme
l'exécution des requêtes de base de données, Le client en parallèle consomme ces services, comme
l'affichage du résultat de la requête.
2. Modèle OSI
OSI est un modèle théorique présentant la circulation des données dans un réseau, il présente
très précisément la liaison qui existe entre deux nœuds successifs d'un réseau d'une manière
descendante et décomposée.
Il est décrit en 7 couches : Application, Présentation, Session, Transport, Réseau, Liaison et Physique.
Ce modèle est mis au point par l'organisation internationale des standards (ISO) afin de normaliser les
communications entre ordinateurs.
3. Le modèle TCP/IP (Transmission Control Protocol/Internet Protocol)
TCP/IP est l'architecture réseau la plus répandue. Le modèle est fondu sur OSI où 04 couches
sont présentées : Application, Transport, Réseau et Liaison. L'architecture TCP/IP inclut de nombreux
services d'application, des protocoles élaborés et complexes, sur lesquels les applications distribuées
peuvent s'appuyer.
TCP/IP représente d'une certaine façon l'ensemble des règles de communication sur Internet et se base
sur la notion adressage IP, c'est-à-dire le fait de fournir une adresse IP à chaque machine du réseau afin
de pouvoir acheminer des paquets de données. Les fonctions essentielles du TCP/IP sont :
• Le fractionnement des messages en paquets.
• L'utilisation d'un système d'adresses .
• L'acheminement des données sur le réseau (routage).
• Le contrôle des erreurs de transmission de données .
• …
Le schéma suivant précise les diverses couches TCP/IP où interviennent les différents protocoles.
Fig. 2 : Le modèle TCPIP
4
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Lorsque vous écrivez un programme qui tourne sur un réseau; vous programmez à la couche
Application. Pratiquement vous être pas concerner par les protocoles TCP et UDP. Mais vous pouvez
utiliser les classes du paquet java.net. Ces classes fournissant la communication indépendamment
des systèmes sur les quelle ils sont introduites. Cependant, pour décider quelles classes votre
programme devrait utiliser; vous avez besoin de comprendre la différence entre le TCP et le UDP.
4. Le protocole TCP (Transmission Control Protocol)
Quand deux applications veulent communiquent entre eux (comme un appel téléphonique), ils
utilisent un support de transmission, en envoient et recevaient sur ce support. Le TCP garantie l'envoi
des données entre les deux applications (comme l'opérateur téléphonique), autrement une erreur est
signalée. Ce mode de communication est appelé : Mode connecté.
TCP est un protocole qui permet une connexion de type point à point entre deux applications. C'est un
protocole fiable qui garantit la réception dans l'ordre d'envoi des données. En contre partie, ce
protocole offre de moins bonnes performances mais c'est le prix à payer pour la fiabilité.
En utilisant la notion de port, plusieurs applications sur la même machine peuvent utiliser TCP en
même temps.
5. Le protocole UDP (User Datagram Protocol)
Le protocole UDP assure une communication non garantie entre deux applications sur un
réseau par envoient des paquets indépendants de données (datagrams) d'une application à une autre.
Comme l'envoi d'un courrier à travers le service postal, l'ordre de la livraison n'est pas important et non
garantie. Chaque paquet est indépendant de l'autre. La communication est dite : Mode non connecté.
Ce protocole offre de bonnes performances car il est très rapide par rapport du TCP, mais ne garanti
pas l'envoi dans l'ordre fourni des données, il est pratiquement réservé à des taches peu importantes.
Pour assurer les échanges, UDP utilise la notion de port, ce qui permet à plusieurs applications
d'utiliser UDP sans que les échanges interfèrent les uns avec les autres.
UDP est utilisé dans de nombreux services tel que echo (port 7), DayTime (13), etc. ... et
dans plusieurs applications peer-to-peer (Ex: Emule, Kazaa, ...).
5
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Une différence importante au niveau de l'utilisation des ports TCP et UDP est que le TCP
réserve pour chaque connexion une file d'attente de messages, au contraire du UDP qui associé à
chaque port sa propre file d'attente.
6. Le protocole IP (Internet Protocol)
Le protocole IP dans la couche réseau du TCP/IP se préoccupe de routage et de contrôle dans
les réseaux interconnectés. Il permet également l'échange de datagrammes (en mode non connecté),
entre des hôtes connectés à des réseaux physiques divers. Le protocole IP est un protocole ouvert et
indépendant du système.
Des nœuds d'un réseau sont potentiellement reliés par plusieurs chemins. Chaque paquet suit un
chemin particulier pour attendre ça destination, mais une succession de paquets provenant d'un même
bloc de données ne suivent pas forcément le même chemin. Pour programmer via le protocole IP en
utilise le TCP ou le UDP.
7. Les ports
La liaison d'un ordinateur avec un réseau ce fait par une connexion physique unique. Mais les
données passent par cette connexion sont utilisées par diverses applications (ou protocoles). Les ports
sont utilisés pour distinguer les données propriétaires à chaque processus.
A cause de diversité des services fournissent par un serveur, quelque port sont réservés à des services
bien spécifié (Ex : HTTP (80), FTP (21), SMTP (25), …). Ces ports sont appelles (Well Known Ports).
Chaque machine sous IP possède quelques 65 535 ports, de 1 à 1024 sont des ports réservés aux
services fondamentaux, de 1025 jusqu'au 5000 sont disponibles aux utilisateurs.
8. Les Sockets
La notion de sockets a été introduite dans l'Unix BSD, Il s'agit d'un modèle permettre à divers
processus de communiquer aussi bien sur une même machine qu'à travers un réseau TCP/IP .
Les sockets se situent dans la couche transport (protocoles UDP ou TCP), elle-même utilisant les
services de la couche réseau.
Dans une communication ; au moins 2 sockets sont utilisées, chaque socket est identifié par une
adresse IP et un numéro du port.
6
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Fig. 3 : Communication par Sockets
9. La diffusion
Le protocole IP a prévu de pouvoir envoyer des paquets à plusieurs machines sans faire la
duplication de ces paquets. Pour garantir transmission des paquets par la diffusion; les routeurs doivent
accepter le passage de ces paquets, et les serveurs de diffusion doivent posséder une adresse IP de
classe D, c'est-à-dire un numéro compris entre 224.0.0.1 et 239.255.255.255 (toutes ces adresses sont
déjà réservées).
Lorsqu'on diffuse un paquet celui-ci à la possibilité de parcourir tout l'Internet. Pour éviter ce chemin;
Les paquets possède un champ entier appelé TTL (Time To Live), qui est décrémenté à chaque
passage dans les routeurs (souvent de la valeur 1). Lorsque cette valeur passe à 0, le routeur détruit le
paquet et ne le diffuse pas. Dans le cas d'un paquet en diffusion, on doit explicitement spécifier la
valeur de ce champ :
• 1 = le paquet reste dans le réseau local.
• 16 = le paquet reste dans la région.
• 127 = le paquet est envoyé au monde entier.
7
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
10. L'accès aux ressources via une URL
Une URL (Uniform Resource Locator) ou locateur de ressource uniforme est une chaîne de
caractères qui désigne une ressource précise accessible par Internet ou Intranet. Une URL est donc une
référence à un objet dont le format dépend du protocole utilisé pour accéder à la ressource.
• Dans le cas du protocole HTTP, l'URL est de la forme :
http://<serveur>:<port>/<chemin>?<param1>&<param2>&...&<paramn>
Elle se compose du protocole HTTP, d'une adresse IP ou du nom du serveur avec numéro de port (80
par défaut), un chemin d'accès vers un fichier ou un nom de service et éventuellement des paramètres
sous la forme clé=valeur.
Exemple
http://www.google.com/convert?value=100&src=miles&dist=kilometers
• Dans le cas du protocole FTP, l'URL est de la forme :
ftp://<user>:<motdepasse>@<serveur>:<port>/<chemin>
Où l'URL est composée d'un compte d'utilisateur et un mot de passe avec le nom du serveur qu'il veut
y accéder. Le port par défaut du FTP est 21.
Exemple
ftp://benbac:2007dz47@free.fr/siteperso
• Dans le cas d'un e-mail, l'URL est de la forme
mailto:<email>
Exemple
mailto:benbac20@gmail.com
• Dans le cas d'un fichier local, l'URL est de la forme :
file://<serveur>/<chemin>
Elle se compose de la désignation du serveur (non utilisé dans le cas du système de fichier local) et du
chemin absolu de la ressource.
Exemple
file:///C:/My%20documents/Mes%20images/logo.jpg
8
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
9
Introduction au JAVA
ans ce chapitre on va mètre l’accent sur le langage Java, on lui définir de façon général et un
peut précise car pour d’écrire un tel langage surtout quant il s’agit d’un langage à objet il faut
écrire un grand ouvrage.
Alors comme tout n'importe quel langage humain, Java permet d'exprimer des concepts. S'il y parvient,
il deviendra un moyen d'expression considérablement plus simple et plus souple que n'importe quelle
alternative, alors même que les problèmes augmentent en taille et en complexité. C’est un langage à
objets qui permet d’écrire de façon simple et claire des programmes portables sur la majorité des
plates-formes. Lié à l’essor du World Wide Web. Il a été conçu par l’équipe de James Gosling en
fonction des multiples exigences des développements informatiques actuels [2].
1. Historique [1] :
Le langage Java fut développé par Sun Microsystems en 1991 dans le cadre du projet Green,
groupe de recherche spécialisé dans le développement de logiciels conçus pour contrôler des appareils
électroniques. Pour mettre en pratique les résultats de leurs travaux, les chercheurs du projet Green
développèrent un prototype appelé Star7, gadget qui ressemblait à une télécommande de téléviseur,
capable de communiquer avec ses semblables. L'idée de départ était de développer le système
d'exploitation de la télécommande Star7 en C++. Toutefois, l'un des membres du projet Green, James
Gosling, en eut rapidement assez des contraintes que posait ce langage. Il s'enferma dans son bureau et
conçut un nouveau langage mieux adapté aux spécificités de Star7. Le langage fut d'abord nommé
Oak, mais le groupe Green s'aperçut ensuite que ce nom était déjà utilisé dans le domaine de
l'informatique. Etant destiné à être utilisé avant tout avec des appareils électroniques, et non avec des
PC modernes, Java se devait d'être un langage peu encombrant, performant et facile à porter pour un
large éventail d'appareils. Il se devait aussi d'être fiable.
Chapitre
2
D
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
10
Bien que Java ait été conçu initialement comme un outil destiné aux appareils électriques et au
développement d'une télévision interactive, Alors c’est les caractéristiques qui le rendaient intéressant
pour le standard Star7 le rendirent aussi intéressant pour le World Wide Web.
Afin de mettre en évidence le potentiel de Java et d'éviter que le fruit de leurs recherches finisse
dans un placard, les membres du projet Green créèrent en 1994 un navigateur Web capable de faire
fonctionner des applets Java. Ce navigateur mit en évidence deux choses à propos de Java : ce qu'il
offrait au World Wide Web et le type de programmes que Java permettait de créer. Les programmeurs
Patrick Naughton et Jonathan Peayne utilisèrent Java pour créer ce navigateur, initialement appelé
WebRunner, mais qui fut renommé HotJava.
Bien que Java et le navigateur HotJava soient parvenus à attirer l'attention de la communauté
du Web, le langage ne commença vraiment à s'imposer que quand Netscape, la première société à
s'intéresser concrètement à ce langage, signa au mois d'août 1995 un contrat de licence l'autorisant à
l'utiliser. Marc Andreesen, cadre dirigeant de Netscape et multimillionnaire, fut l'un des premiers
décideurs étrangers à Sun à percevoir l'intérêt de Java, et il gratifia ce langage d'un soutien marqué lors
de la conférence Java0ne de mai 1996. "Java est une opportunité très intéressante pour nous tous",
déclara t-il aux participants. Peu après la sortie publique de la première version de Java, la société Sun
cibla ses efforts de développement pour Java et elle recruta plusieurs centaines de nouveaux employés
pour continuer à développer le langage.
2. Les Caractéristiques de Java:
Java est orientée objet il bénéficie d’une gigantesque bibliothèque de « classes» avec les
quelles il est aisé de composer des interfaces graphiques, de créer des applications « multithread», de
communiquer entre ordinateurs, etc. L’utilisation de Java s’étend de l’animation d’une page HTML
par une « applet» à des applications complexes qui tournent à travers le réseau Internet : forums de
discussion, partage de bases de données, jeux, etc… [2]. Enfin on trouve de plus en plus fréquemment
le langage Java dans les systèmes embarqués.
Java possède un certain nombre de caractéristiques qui ont largement contribué à son énorme succès
2.1 La Simplicité offerte par java :
Nous avons voulu créer un système qui puisse être programmé simplement sans nécessiter un
apprentissage ésotérique, et qui tire parti de l'expérience standard actuelle. Java a été conçu de façon
relativement proche de C++ pour faciliter la compréhension du système. De nombreuses fonctions
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
11
compliquées, mal comprises, rarement utilisées de C++, qui nous semblaient par expérience apporter
plus d'inconvénients que d'avantages, ont été supprimées de Java.
2.2 Conçu pour fonctionner sur le Web: Applet
En effet, Java a été Conçue pour fonctionner très sûrement sur le Web. Les navigateurs de web
comme Navigator de Netscape et Internet Explorer de Microsoft, permettent de télécharger un
programme Java sur le L’Internet et de le faire fonctionner localement sur le système de l'utilisateur du
Web.
Ces programmes, appelés Applets, se présentent comme des images sur une page Web.
Contrairement aux images, toutefois, les applets peuvent être interactives c'est-à-dire admettre des
données entrées par l'utilisateur, y répondre et présenter du contenu capable d'évoluer en permanence.
Les applets peuvent servir à créer des animations, des figures, des jeux, des formulaires capables de
réagir à des informations entrées par l'utilisateur, ou tout autre type d'effets interactifs sur une même
page Web, au milieu d'éléments de texte et de graphismes [1].La Figure suivante (Figure 4) illustre
une Applet (jeu).
Fig. 4 : Java permet à une personne de jouer contre un adversaire
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
12
2.3 Un langage indépendant de toute plate-forme : Application
Java est un langage indépendant de toute plate-forme, ce qui signifie qu'un même programme
peut fonctionner sur différentes plates-formes et sous différents systèmes d'exploitation. C'est là l'un
des principaux avantages de Java par rapport à d'autres langages de programmation.
2.3.1 Programmes multi plates formes Java :
Si les programmes Java sont indépendants de toute plate-forme, c'est parce qu'ils reposent sur
une machine virtuelle, qui est une sorte d'ordinateur installé à l'intérieur de l'ordinateur physique dont
se sert l'utilisateur. Cette machine virtuelle prend les programmes Java compilés et convertit leurs
instructions en commandes compréhensibles pour un système d'exploitation. Le même programme
compilé, qui se présente sous un format appelé pseudo-code, peut fonctionner sur n'importe quelle
plate-forme et sous n'importe quel système d'exploitation possédant une machine Java virtuelle
(Figure 5) [1].
Fig. 5 : Le pseudo-code de Java.
• Définition de Pseudo-code: Le pseudo-code est similaire au code machine produit par d'autres
langages, mais il n'est pas propre à un processeur donné. Il ajoute un niveau entre la source et le
code machine.
• Le Pseudo-machine : C’est un compromis qui assure la portabilité d'un langage. Lorsque le
processeur P n'est pas une machine qui existe physiquement mais un logiciel simulant (ou
interprétant) une machine on appelle cette machine pseudo-machine ou p-machine. Le programme
source est alors traduit par le compilateur en instructions de la pseudo-machine et se dénomme
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
13
pseudo-code. La p-machine standard qui se dénomme machine virtuelle dans le langage Java
peut ainsi être implantée dans n'importe quel ordinateur physique à travers un logiciel qui simule
son comportement; un tel logiciel est appelé interpréteur de la p-machine. Donc dans le cas d'une
p-machine le programme source est compilé, mais le programme cible est exécuté par l'interpréteur
de la p-machine.
Beaucoup de langages possèdent pour une plate-forme fixée des interpréteurs ou des compilateurs,
moins possèdent une p-machine, Java est l'un de ces langages[4] .
2.3.2 Bytecode et Compilation native :
a. Compilation native: La compilation native consiste en la traduction de la source java en langage
binaire exécutable sur la plat-forme concernée (Figure 6).
Fig. 6 : Java est un compilateur neutre.
b. Bytecode : La compilation en bytecode (ou pseudo-code) ce fait comme suit : le compilateur Javac
traduit le programme source xxx.java en un code intermédiaire indépendant de toute machine
physique et non exécutable directement, le fichier obtenu se dénomme xxx.class. Seule une p-machine
(dénommée machine virtuelle java) est capable d'exécuter ce bytecode. Le bytecode est aussi
dénommé instructions virtuelles java. Exemple (Figure 7).
Fig. 7 : Le bytecode Java.
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
14
2.3.3 La machine virtuelle Java (JVM) :
1. Définition : La machine virtuelle JAVA est
aussi appelée interpréteur Java, elle se
charge d’exécuter le programme source java
traduit en bytecode (Figure 8) sur la
machine physique à travers son système
d'exploitation (Windows, Unix,MacOs,...).
Les applications Java, ne peuvent
fonctionner que sur un système sur lequel
une JVM adéquate a été installée [1].
Fig. 8 : Fonctionnement de la JVM
2. Fonctionnement élémentaire de la machine virtuelle Java [4] :
Une machine virtuelle Java contient 6 parties principales :
1. Un jeu d'instructions en pseudo-code.
2. Une pile d'exécution LIFO pour stocker les paramètres des méthodes et les résultats des méthodes.
3. Une file FIFO d'opérandes pour stocker les paramètres et les résultats des instructions du p-code.
4. Un segment de mémoire dans lequel s'effectuent l'allocation et la désallocation d'objets.
5. Une zone de stockage des méthodes contenant le p-code de chaque méthode et son environnement.
6. Un ensemble de registres servant à mémoriser les différents états de la machine et les informations
utiles à l'exécution de l'instruction présente dans le registre instruction bytecode en cours.
Comme toute machine la machine virtuelle Java est fondée sur l'architecture de Von Neumann et
elle exécute les instructions séquentiellement un à une.
Fig. 9 : un synoptique de la machine virtuelle Java
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
15
Les registres sont des mémoires 32 bits :
vars : pointe dans la pile vers la première variable locale de la méthode en cours d'exécution.
pc : compteur ordinal indiquant l'adresse de l'instruction de p-code en cours d'exécution.
optop : sommet de pile des opérandes.
frame : pointe sur le code et l'environnement de la méthode qui en cours d'exécution.
2.4 Java est totalement adapté au réseau : Distribution - Socket, Servlet, RMI [1]
Java possède une importante bibliothèque de routines permettant de gérer les protocoles
TCP/IP tels que HTTP et FTP. Les applications Java peuvent charger et accéder à des pages Web sur
Internet via des URL avec la même facilité qu'elles accèdent à un fichier local sur le système.
Les fonctionnalités réseau de Java sont à la fois fiables et d'utilisation aisée. Toute personne
ayant essayé de faire de la programmation pour Internet avec un autre langage se réjouira de la
simplicité de Java lorsqu'il s'agit de mettre en oeuvre des tâches lourdes, comme l'ouverture d'une
connexion avec un Socket. De plus, Java rend plus facile l'élaboration des scripts CGI (Common
Gateway Interface), et un mécanisme élégant, nommé Servlet, augmente considérablement l'efficacité
du traitement côté serveur, assuré par Java. De nombreux serveurs Web, parmi les plus courants,
supportent les servlets. Le mécanisme d'invocation de méthode à distance (RMI) autorise la
communication entre objets distribués.
Fig. 10 : L’adaptation aux réseaux de Java
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
16
2.5 Java est multitâche : Thread [1]
Evoluer dans un environnement réseau, sur le Web par exemple, engendre souvent la nécessité
d'exécuter plusieurs tâches simultanément : jouer un son, produire une animation, exécuter une requête
importante sur une base de données, etc. Java est nativement doté d'un ensemble complet de primitives
de gestion du multitâche - ou multithreading - simplifiant grandement l'écriture de programmes
s'appuyant sur ce type de fonctionnalités.
2.6 Java permet l'exécution dynamique [1]
Java permet l'exécution dynamique du code grâce à son interpréteur. L'interpréteur Java
exécute le bytecode et autorise le chargement de code additionnel à la volée. Cette caractéristique
pourra particulièrement être mise à contribution dans le cadre des applications Internet et Intranet. En
outre, Java rend aujourd'hui possible le transport des objets entre différents programmes. Ce
mécanisme puissant permet de décider de l'endroit où s'exécute le code lors du déroulement du
programme et ouvre la porte à de vastes possibilités (optimisation, répartition de charge).
2.7 Composants logiciels réutilisables : Javabeans [1]
Les composants d'un programme doivent pouvoir être utilisés avec plus d'un package logiciel
pour avoir la possibilité de réassembler ces composants pour créer d'autres programmes avec une plus
grande efficacité de développement. Cette idée consiste à ne construire qu'une seule fois des
composants de petite taille, et à les réutiliser autant de fois que possible, en rationalisant ainsi
l'ensemble du processus de développement.
2.8 Java assure la Sécurité :
Java a été conçue pour être exploité dans des environnements serveur et distribués. Dans ce but,
la sécurité n’a pas été négligée. Java permet la construction de systèmes inaltérables et sans virus.
Contrairement aux ActiveX, Java dispose d'un modèle de sécurité avec une granularité élevée.
Le système garantit à l'utilisateur un niveau de protection élevé pour son système.
2.9 Java est robuste :
Comme Visual C++, Visual Basic et Delphi, Java est un langage robuste qui peut être exploité
pour développer un large éventail de programmes utilisant une interface utilisateur graphique, pouvant
être appliqués en réseau et se connecter à des bases de données, et offrant d'autres fonctionnalités
toutes plus sophistiquées les unes que les autres.
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
17
2.10 Les JSP (Java Server Pages) :
Est une technologie Java qui permet la génération de pages web dynamiques comme plusieurs
technologies comme PHP, ASP et ASP.NET. Chacune possèdent des avantages et des inconvénients.
La technologie JSP permet de séparer la présentation sous forme de code HTML et les traitements sous
formes de classes Java. C'est le mélange de la puissance de Java côté serveur et la facilité de mise en
page d'HTML côté client. Les fichiers JSP possèdent par convention l'extension .jsp.
Les JSP sont basées sur les servlets. Au premier appel de la page JSP. La servlet générée est compilée
et sauvegardée puis elle est exécutée. Les appels suivants de JSP sont beaucoup plus rapides car la
servlet, conservée par le serveur, est directement exécutée.
Cette approche possède plusieurs avantages :
• L'utilisation de Java par les JSP permet une indépendance de la plate−forme d'exécution mais
aussi du serveur web utilisé.
• La séparation des traitements et de la présentation : la page web peut être écrite par un designer
et les tags Java peuvent être ajoutés ensuite par le développeur. Les traitements peuvent être
réalisés par des composants réutilisables (des Java beans).
• Les JSP sont basées sur les servlets : tous ce qui est fait par une servlet pour la génération de
pages dynamiques peuvent être fait avec une JSP.
Il est préférable d'utiliser les JSP pour générer des pages web dynamiques, l'usage des servlets est
obligatoire si celles ci doivent communiquer directement avec une applet ou une application et non
plus avec un serveur web. les pages JSP sont exécutées dans un serveur web (Tomcat par exemple).
Exemple datedujour.jsp
<%@ page import="java.util.Date"%>
<html>
<body>
<%! Date dateDuJour; %>
<% dateDuJour = new Date();%>
Date du jour : <%= dateDuJour %><BR>
</body>
</html>
Résultat
http://localhost:8084/DateDuJour/
Date du jour : Fri Feb 23 20:49:38 GMT+01:00 2007
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
18
2.11 Les servlets :
Une servlet est un programme qui s'exécute côté serveur, elle reçoit une requête du client, elle
effectue des traitements et renvoie le résultat. La liaison entre la servlet et le client peut être directe ou
passer par un intermédiaire comme par exemple un serveur HTTP par la génération de pages html
dynamiques. En général; n'importe quel protocole reposant sur le principe de requête/réponse peut
faire usage d'une servlet.
Pour exécuter une servlet, il suffit de saisir une URL qui désigne la servlet dans un navigateur.
1. Le serveur reçoit la requête http qui nécessite une servlet de la part du navigateur.
2. Si c'est la première sollicitation de la servlet, le serveur l'instancier. Les servlets sont stockées
(sous forme de fichier .class). La servlet reste en mémoire jusqu'à l'arrêt du serveur.
3. La servlet en mémoire, peut être appelée par plusieurs threads lancés par le serveur pour
chaque requête.
4. Le serveur créé un objet qui représente la requête http et objet qui contiendra la réponse et les
envoie à la servlet
5. La servlet créé dynamiquement la réponse sous forme de page html transmise via un flux dans
l'objet contenant la réponse.
6. Le serveur récupère l'objet réponse et envoie la page html au client.
L'API servlet regroupe un ensemble de classes dans deux packages :
• javax.servlet : contient les classes pour développer des servlets génériques
indépendantes d'un protocole.
• javax.servlet.http : contient les classes pour développer des servlets qui reposent sur
le protocole http.
Pour pouvoir mettre en oeuvre des servlets, il faut obligatoirement utiliser un serveur web qui propose
un environnement d'exécution pour les servlets. Il en existe plusieurs commerciaux ou libres. Le plus
connu et le plus utilisé est Tomcat et développée par le groupe Apache.
Exemple Exemple_Servlet.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Exemple_Servlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
19
out.println("<html>");
out.println("<head>");
out.println("<title>Bonjour tout le monde</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Bonjour tout le monde</h1>");
out.println("</body>");
out.println("</html>");
}
}
Résultat
http://localhost:8084/Exemple_Servlet/
Bonjour le monde
2.12 La technologie RMI (Remote Method Invocation) :
Cette technologie est développée et fournie par Sun à partir du JDK 1.1 pour permettre de
mettre en oeuvre facilement des objets distribués. Le but de RMI est de permettre l'appel, l'exécution et
le renvoi du résultat d'une méthode exécutée dans une machine virtuelle différente de celle de l'objet
l'appelant. Cette machine virtuelle peut être sur une machine différente à condition qu'elle soit
accessible par le réseau.
La machine sur laquelle s'exécute la méthode distante est appelée serveur.
L'appel coté client consiste à obtenir une référence sur l'objet distant puis simplement appeler la
méthode à partir de cette référence.
La technologie RMI se charge de rendre transparente la localisation de l'objet distant, son appel et le
renvoi du résultat.
Elle utilise deux classes particulières, le stub et le skeleton qui doivent être générées avec l'outil
rmic fourni avec le JDK. Le stub est une classe qui se situe côté client et le skeleton est son
homologue coté serveur. Ces deux classes se chargent d'assurer tous les mécanismes d'appel, de
communication, d'exécution, de renvoi et de réception du résultat.
Le développement coté serveur se compose de :
o La définition d'une interface qui contient les méthodes qui peuvent être appelées à distance.
o L'écriture d'une classe qui implémente cette interface.
o L'écriture d'une classe qui instanciera l'objet et l'enregistrera en lui affectant un nom dans le
registre de nom RMI (RMI Registry).
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
20
Le développement côté client se compose de :
o L'obtention d'une référence sur l'objet distant à partir de son nom.
o L'appel à la méthode à partir de cette référence.
o Enfin, il faut générer les classes stub et skeleton en exécutant le programme rmic
avec le fichier source de l'objet distant
3. Généralité sur Java :
3.1 Les avantages de Java [1] :
Le primordial avantage de ce langage de programmation réside dans le fait que la syntaxe de
java est analogue à celle de C++, ce qui le rend économique et professionnel. Java est un langage "à
objets", par opposition au C++ qui lui, est "orienté objet" et qui autorise la programmation
procédurale. Tous les éléments de Java, à l'exception de quelques types de base tels que les nombres,
sont des objets. (La conception orientée objet présentant de nombreux avantages pour les projets
sophistiqués, elle a remplacé les techniques structurées antérieures).On distingue ces 4 principales
avantages :
1. La mémoire dans Java est allouée et libérée automatiquement. Vous ne risquez pas de pertes de
mémoire.
2. Ils ont éliminé l'arithmétique des pointeurs introduisant du même coup une vraie gestion de
tableau. La notion de référence sur une zone mémoire remplace avantageusement celle de "
pointeur", car elle supprime la possibilité d'écraser toute zone mémoire à cause d'un compteur
erroné.
3. Ils ont éliminé toute possibilité de confusion entre une affectation et un test d'égalité dans une
instruction conditionnelle. L'instruction if (n = 3) ne pourra pas franchir l'étape de la compilation.
4. Ils ont supprimé l'héritage multiple en le remplaçant par une nouvelle notion d'interface dérivée
d'Objective C. Les interfaces vous offrent tout ce que vous pouvez obtenir à partir de l'héritage
multiple, sans la complexité de la gestion de hiérarchie d'héritage multiple.
3.2 Comparer le langage Java:
Le langage Java est en fait un compromis entre les langages de haut-niveau tel que Shells et du
TCL, Les langages orientées-objet tel que Perl, les langages scripts portables, mais lents, et les
langages compilés, tels que C et C++, qui sont non portables mais rapides [6].
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
21
Voici une petite comparaison illustrant les caractéristiques du langage JAVA :
caractéristique Java SmallTalk TCL Perl Shells C C++
Simple
Orienté
Objet
Robuste
Sécurisé
Interprété
Dynamique
Portable
Architecture Neutre
Multithread
Exceptions
Performance Haute Moyenne Basse Moyenne Basse Haute Haute
Ou la caractéristique est :
existe existe parfois n'existe pas
Après avoir lu ce tableau, on remarque que Java possède une grande palette d'attributs
intéressants, pouvant être très bénéfique à une grande variété de programmeurs. Java, Perl et
SmallTalk sont des environnements de programmation comparables, offrant les capacités les plus
riches aux développeurs d'applications logicielles.
4. Le Java Développement Kit (JDK) :
4.1 Définition :
Le JDK regroupe l'ensemble des éléments permettant le développement, la mise au point et
l'exécution des programmes Java. Le JDK inclut de nombreux outils de développement ainsi que
l'ensemble de l'API Java dont le développeur dispose pour construire ses programmes. Le JDK peut
donc être perçu comme :
1. un ensemble d'outils ;
2. un jeu de classes et de services ;
3. un ensemble de spécifications.
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
22
te et différentes versions sont mises à la disposition des
développeurs. La dernière mouture du JDK a été renommée SDK depuis la version 1.2.2 [1].Bien
qu'un d
Description
Le JDK est en évolution constan
éveloppement Java puisse être entièrement réalisé à l'aide du JDK, les outils fournis sont de
type ligne de commande - portabilité oblige. Ils n'autorisent donc pas une approche visuelle ni une
automatisation du développement comme c'est le cas avec JBuilder. Le Tableau suivant recense les
principaux outils livrés avec le JDK.
Nom
java.ex
Machine virtuelle Java, permet l'exécution des programmes
(redistribuable en version Ja
e
va 2).
jre.exe
Machine virtuelle Java redistribuable (Java Runtime Engine), permet
l'exécution des programmes. Attention, ce programme n'existe plus
en plate-forme Java 2. Il est remplacé par java.exe.
javac.exe Compilateur Java.
appletviewer.exe ermettant l'exécution des applets.Machine virtuelle Java p
jar.exe Permet la création et la manipulation d'Archives Java (JAR).
javadoc.exe Générateur de documentation Java, au format HTML.
javap.exe Désassembleur de classes Java compilées.
jdb.exe Débogueur Java en ligne de commande.
4.2 L ons et les te
s:
JDK 1.4
JDK JDK 1.5
(plate-forme Java 2)
(nouvelle plate-forme Java 2, bêta)
5. L rammation en Java [6] :
d'invoquer la commande javac avec le nom du fichier
source avec son extension .java : javac NomFichier.java
Le nom
es versi chnologies du JDK :
Les versions majeures du JDK sont les suivante
JDK 1.0
1.1
JDK 1.2 JDK 1.6
JDK 1.3
es techniques de base de prog
5.1 La compilation d'un code source :
Pour compiler un fichier source il suffit
du fichier doit correspondre au nom de la classe principale en respectant la casse même si le
système d'exploitation n'y est pas sensible
Suite à la compilation, le pseudo code Java est enregistré sous le nom NomFichier.class
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
23
Fig. 11 : Compilation par une commande.
5.2 L'exécution d'un pro
Une classe ne peut être exécutée que si elle contient une méthode main() correctement
nt du byte-code il suffit d'invoquer la commande java avec le
nom du
Il suffit de créer une page HTML pouvant être très simple :
Exemple:
gramme et d'une applet :
a. L'exécution d'un programme :
définie. Pour exécuter un fichier contena
fichier source sans son extension .class : java NomFichier
b. L'exécution d'une applet :
<HTML>
<head>>
TITLE>Test d'une Applet Java</TITLE>
ad>
height=200> </APPLET>
<
</he
<BODY>
<APPLET code="NomFichier.class" width=270
</BODY>
</HTML>
Il faut ensuite visualiser la page créée dans l'appletviewer ou dans un navigateur 32 bits
compatible avec la version de Java dans laquelle l'applet est écrite.
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
24
Le langage JAVA et la
programmation réseau
epuis son origine, Java fournit plusieurs classes et interfaces destinées à la programmation
réseau, à cause de son API qui a été bien conçu et riche d'une côté, et traité la plupart des
interfaces, protocoles et plateformes d'autres côté; la programmation des applications réseaux
en JAVA est devenue un choix primordial.
Plusieurs domaines d'application pouvant être programmé aisément avec JAVA:
• Navigation d'un l'Internet (HTTP).
• Messagerie électronique (SMTP et POP).
• Conception de nouveaux protocoles.
• Sécurité des communications (Cryptage des messages, authentification, …).
• Mise en place des services Internet et interfaces GUI clients.
• Recherche des hôtesses et adressage (DNS).
• Transfert de fichiers (FTP).
• Déploiement à distance des applications multiple systèmes (RMI).
• …
En plus de ça, JAVA est le premier langage est a fourni une bibliothèque riche et puissant et multi
plateforme qui couvert divers domaines comme qui sont cités ci-dessus.
Chapitre
3
D
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
25
Le paquet java.net
Les classes et interfaces utiles au développement réseau sont regroupées dans le package
java.net. Les classes utilisées sont :
• InetAddress, NetworkInterface : pour l'adressage IP.
• Socket et ServerSocket pour les protocole TCP.
• DatagramPacket, DatagramSocket, et MulticastSocket pour UDP.
• URL, URLConnection, URLEncoder,… pour la couche application.
1. Les adresses Internet et JAVA
Chaque machine du réseau Internet a une adresse unique, cette adresse (appelée adresse IP ) est
codée sur 4 octets séparés par des points (Exemple 192.168.0.15). Le trois bits du poids fort (ici c'est
192.168.0) représente l'adresse du réseau et le dernier bit faible (ici c'est 15) représente l'adresse du
machine sur ce réseau.
Pour faciliter la compréhension humaine, un serveur particulier appelé DNS (Domaine Name
Service) est capable d'associer un nom à une adresse IP.
1.1 La classe InetAddress
La classe qui permet de manipuler les adresses Internet est InetAddress. Un objet de la
classe InetAddress représente une adresse Internet, elle contient des méthodes pour lire une
adresse, la comparer avec une autre ou la convertir en chaîne de caractères, elle ne possède pas de
constructeur : il faut utiliser certaines méthodes statiques de la classe pour obtenir une instance de cette
classe.
Méthode Rôle
InetAddress getByName(String)
Renvoie l'adresse Internet associée au nom d'hôte
passé en paramètre.
InetAddress[] getAllByName(String)
Renvoie un tableau des adresses Internet
associées au nom d'hôte passé en paramètre.
InetAddress getLocalHost() Renvoie l'adresse Internet de la machine locale.
byte[] getAddress()
Renvoie un tableau contenant les 4 octets de
l'adresse Internet.
String getHostAddress()
Renvoie l'adresse Internet sous la forme d'une
chaîne de caractères.
String getHostName() Renvoie le nom du serveur.
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
26
Le programme suivant fournit l'adresse locale de la machine, adresse de l'université de Laghouat et les
adresses IP du serveur GOOGLE.
Exemple Exemple_InetAdress.java
import java.net.*;
public class Exemple_InetAddress {
public static void main(String[] args) {
try {
// Renvoi l'adresse de la machine
InetAddress Adresse_Locale = InetAddress.getLocalHost();
System.out.println("L'adresse locale = " + Adresse_Locale.getHostAddress());
// Renvoi l'adresse IP du serveur de l'université de Laghouat
InetAddress Adresse_Serveur = InetAddress.getByName("lagh-univ.dz");
System.out.println("L'adresse de l'université de Laghouat = "
+ Adresse_Serveur.getHostAddress());
// Renvoi les adresses du serveurs Google
InetAddress[] Adresses_Serveurs = InetAddress.getAllByName("google.com");
System.out.println("Les adresses du Google : ");
for (int i = 0; i < Adresses_Serveurs.length; i++)
System.out.println(" " + Adresses_Serveurs[i].getHostAddress());
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Résultat
L'adresse locale = 127.0.0.1
L'adresse de L'université de Laghouat = 192.18.97.71
Les adresses du Google :
207.46.249.27
207.46.134.155
207.46.249.190
207.46.134.222
207.46.134.190
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
27
1.2 La classe NetworkInterface
La nouvelle classe NetworkInterface (J2SE 1.4) permet d'obtenir la liste des interfaces de
connexion au réseau de la machine. Une interface de connexion au réseau se caractérise par un nom
court, une désignation et une liste d'adresses IP. Les méthodes utilisées dans cette classe sont:
Méthode Description
String getName() Renvoie le nom court de l'interface
String getDisplayName() Renvoie la désignation de l'interface
Enumeration getInetAddresses()
Renvoie une énumération d'objet InetAddress
contenant la liste des adresses IP associée à
l'interface
L'exécution de l'exemple donne toutes les interfaces liées à notre machine.
Exemple Exemple_Intetfaces.java
import java.io.*;
import java.net.*;
import java.util.*;
import static java.lang.System.out;
public class Exemple_Intetfaces {
public static void main(String args[]) throws SocketException {
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();
for (NetworkInterface netint : Collections.list(nets))
displayInterfaceInformation(netint);
}
static void displayInterfaceInformation(NetworkInterface netint) throws SocketException {
out.printf("Nom court: %sn", netint.getDisplayName());
out.printf("Désignation: %sn", netint.getName());
Enumeration<InetAddress> inetAddresses = netint.getInetAddresses();
for (InetAddress inetAddress : Collections.list(inetAddresses)) {
out.printf("Adresse IP %sn", inetAddress);
}
out.printf("n");
}
}
Résultat
Nom court: MS TCP Loopback interface
Désignation: lo
Adresse IP /127.0.0.1
Nom court: Carte Fast Ethernet CNet PRO200 PCI - Miniport
d'ordonnancement de paquets
Désignation: eth0
Adresse IP /192.168.0.15
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
28
2. La communication par des sockets et JAVA
Les Sockets sont des objets permettant la gestion de deux flux de données : un flux d'entrée
(InputStream), garantissant la réception des données, et un flux de sortie (OutputStream), servant à
envoyer les données. En Java, nous distinguerons deux types de Socket: les Sockets simples (dits
"clients") et les Sockets serveurs.
Les Sockets représentent l'objet de base pour la programmation TCP et UDP.
Utilisation du protocole TCP
Les classes URL et URLConnection fournissent un mécanisme de haut niveau pour l'accès aux
ressources à l'Internet. Mais par fois, nos programmes nécessitent une communication réseau de bas
niveau, par exemple l'écriture des applications Client/Serveur.
Le paquet java.net offre une communication à double sens entre deux programmes exécute dans
un réseau. Les classes du Socket et ServerSocket sont utilisées pour faire la liaison entre le
programme client et le programme serveur.
Le schéma suivant illustre le mécanisme de communication entre le serveur et le client.
Fig. 12 : Communication par TCP
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
29
a. La classe ServerSocket
La classe ServerSocket est utilisée côté serveur : elle attend simplement les appels du ou
des clients. C'est un objet du type Socket qui prend en charge la transmission des données.
Cette classe représente la partie serveur du Socket. Un objet de cette classe est associé à un port sur
lequel il va attendre les connexions d'un client. Généralement, à l'arrivée d'une demande de connexion,
un thread est lancé pour assurer le dialogue avec le client sans bloquer les connexions des autres
clients.
La classe SocketServer possède plusieurs constructeurs dont les principaux sont :
Constructeur Rôle
ServerSocket() Constructeur par défaut.
ServerSocket(int)
Créer une Socket sur le port fourni en
paramètre.
ServerSocket(int, int)
Créer une Socket sur le port avec la taille
maximale de la file fourni en paramètre.
Tous ces constructeurs peuvent lever une exception de type IOException.
La classe SocketServer possède plusieurs méthodes :
Méthode Rôle
Socket accept() Attendre une nouvelle connexion
void close() Fermer la socket
Si un client tente de communiquer avec le serveur, la méthode accept() renvoie une Socket qui
encapsule la communication avec ce client.
En générale, l'algorithme suivi pour établir une connexion est la suivante :
o Créer une instance de la classe SocketServer en précisant le port en paramètre.
o Définir une boucle sans fin contenant les actions ci-dessous :
Appelle de la méthode accept() qui renvoie une Socket lors d'une nouvelle
connexion.
Obtenir un flux en entrée et en sortie à partir de la Socket.
Ecrire les traitements à réaliser.
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
30
Exemple Exepmple_ServeurTCP.java
import java.net.*;
import java.io.*;
public class Exemple_ServeurTCP {
final static int port = 9632;
public static void main(String[] args) {
try {
System.out.println("Lancement du serveur");
ServerSocket socketServeur = new ServerSocket(port);
while (true) {
Socket socketClient = socketServeur.accept();
System.out.println("Connexion avec : " + socketClient.getInetAddress());
BufferedReader in = new BufferedReader(
new InputStreamReader(socketClient.getInputStream()));
PrintStream out = new PrintStream(socketClient.getOutputStream());
out.println("Veuillez saisir votre compte : ");
String Compte = in.readLine();
System.out.println("Compte d'utilisaeur : " + Compte);
out.println("Bienvenue " + Compte);
socketClient.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Résultat
java -jar Exemple_ServeurTCP.jar
Lancement du serveur
Connexion avec : /127.0.0.1
Compte d'utilisaeur : benbac
L'inconvénient de ce modèle est qu'il ne peut traiter qu'une connexion en même temps. Si plusieurs
demandes de connexion arrivent simultanément, une seule est acceptée, les autres sont mise en attente
jusqu'au ce que le premier termine ça connexion. Pour pouvoir traiter plusieurs connexions en même
temps (plusieurs clients), il faut que le serveur soit multithreadé.
Exemple Exepmple_ServeurTCPThread.java
import java.net.*;
import java.io.*;
public class Exemple_ServeurTCPThread extends Thread {
final static int port = 9632;
private Socket socket;
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
31
public static void main(String[] args) {
try {
ServerSocket socketServeur = new ServerSocket(port);
System.out.println("Lancement du serveur");
while (true) {
Socket socketClient = socketServeur.accept();
Exemple_ServeurTCPThread Serveur= new Exemple_ServeurTCPThread(socketClient);
Serveur.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public Exemple_ServeurTCPThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
String message = "";
System.out.println("Connexion avec le client : " + socket.getInetAddress());
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
message = in.readLine();
out.println("Bonjour " + message);
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Résultat
java -jar Exemple_ServeurTCPThread.jar
Lancement du serveur
Connexion avec le client : /127.0.0.1
Compte d'utilisaeur : benbac
Connexion avec le client : /127.0.0.1
Compte d'utilisaeur : mustapha
Connexion avec le client : /127.0.0.1
Compte d'utilisaeur : aziz
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
32
b. La classe Socket
Les sockets implémentent le protocole TCP. La classe contient les méthodes de création des
flux d'entrée et de sortie correspondants. Les sockets constituent la base des communications par le
réseau.
Comme les flux Java sont transformés en format TCP/IP, il est possible de communiquer avec
l'ensemble des ordinateurs qui utilisent ce même protocole. La seule chose importante au niveau du
système d'exploitation est qu'il soit capable de gérer ce protocole.
Cette classe encapsule la connexion à une machine distante via le réseau. Cette classe gère la
connexion, l'envoi de données, la réception de données et la déconnexion.
La classe Socket possède plusieurs constructeurs dont les principaux sont :
Constructeur Rôle
Server() Constructeur par défaut
ServerSocket(String, int)
Créer une socket sur la machine dont le nom et le port
sont fournis en paramètre.
ServerSocket(InetAddress, int)
Créer une socket sur la machine dont l'adresse IP et le
port sont fournis en paramètre.
La classe Socket possède de nombreuses méthodes :
Méthode Rôle
InetAddress getInetAddress() Renvoie l'adresse I.P. à laquelle la socket est connectée.
void close() Fermer la socket.
InputStream getInputStream()
Renvoie un flux en entrée pour recevoir les données de
la socket.
OutputStream
getOutputStream()
Renvoie un flux en sortie pour émettre les données de
la socket.
En générale, l'algorithme suivi pour établir une connexion est la suivante :
• Créer une instance de la classe Socket en précisant la machine et le port en paramètre.
• Obtenir un flux en entrée et en sortie.
• Ecrire les traitements à réaliser.
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
33
Exemple Exepmple_ClientTCP.java
import java.net.*;
import java.io.*;
public class Exemple_ClientTCP {
final static int port = 9632;
public static void main(String[] args) {
Socket socket;
try {
InetAddress serveur = InetAddress.getByName(args[0]);
socket = new Socket(serveur, port);
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
Console c = System.console();
String Message = c.readLine(in.readLine());
out.println(Message);
System.out.println(in.readLine());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Résultat
java -jar Exemple_ClientTCP.jar 127.0.0.1
Veuillez saisir votre compte : benbac
Bienvenue benbac
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
34
2.2 Utilisation du protocole UDP
L'échange de données avec UDP se fait avec deux sockets, l'une sur le serveur, l'autre sur le client.
Chaque socket est caractérisé par une adresse Internet et un port.
Pour utiliser le protocole UDP, java défini deux classes DatagramSocket et DatagramPacket.
Le schéma suivant illustre le mécanisme de communication entre le serveur et le client.
Fig. 13 : Communication par UDP
a. La classe DatagramSocket
Cette classe crée un Socket qui utilise le protocole UDP, pour émettre ou recevoir des données.
Cette classe possède plusieurs constructeurs :
Constructeur Rôle
DatagramSocket()
Créé une socket attachée à toutes les adresses IP
de la machine et un à des ports libres sur la
machine.
DatagramSocket(int)
Créé une socket attachée à toutes les adresses IP
de la machine et au port précisé en paramètre.
DatagramSocket(int, InetAddress)
Créé une socket attachée à adresse IP et au port
précisé en paramètre.
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
35
Tous les constructeurs peuvent lever une exception de type SocketException : en particulier, si le
port précisé est déjà utilisé lors de l'instanciation de l'objet DatagramSocket, une exception de type
BindException est levée. Cette exception hérite de SocketException.
La classe DatagramSocket définit plusieurs méthodes :
Méthode Rôle
close() Fermer la Socket et ainsi libérer le port.
receive(DatagramPacket) Recevoir des données.
send(DatagramPacket) Envoyer des données.
int getPort() Renvoie le port associé à la socket.
Par défaut, un objet DatagramSocket ne possède pas de timeout lors de l'utilisation de la méthode
receive(). La méthode bloque donc l'exécution jusqu'à la réception d'un paquet de données.
b. La classe DatagramPacket
Cette classe encapsule une adresse Internet, un port et les données qui sont échangées grâce à
un objet de type DatagramSocket. Elle possède plusieurs constructeurs pour encapsuler des
paquets émis ou reçus.
Constructeur Rôle
DatagramPacket(byte tampon[], int
length)
Encapsule des paquets en réception dans un
tampon
DatagramPacket(byte port[], int
length, InetAddress adresse, int
port)
Encapsule des paquets en émission à destination
d'une machine
La classe propose des méthodes pour obtenir ou mettre à jour les informations sur le paquet encapsulé.
Méthode Rôle
InetAddress getAddress () Renvoie l'adresse du serveur
byte[] getData() Renvoie les données contenues dans le paquet
int getPort () Renvoie le port
int getLength ()
Renvoie la taille des données contenues dans le
paquet
setData(byte[])
Mettre à jour les données contenues dans le
paquet
Le format des données échangées est un tableau d'octets, il faut donc correctement initialiser la
propriété length qui représente la taille du tableau pour un paquet émis et utiliser cette propriété
pour lire les données dans un paquet reçu.
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
36
Exemple
//Exepmple_ServeurUDP.java
import java.io.*;
import java.net.*;
public class Exemple_ServeurUDP {
final static int port = 9632;
final static int taille = 1024;
static byte buffer[] = new byte[taille];
public static void main(String argv[]) throws Exception {
DatagramSocket socket = new DatagramSocket(port);
System.out.println("Lancement du serveur");
while (true) {
DatagramPacket paquet = new DatagramPacket(buffer, buffer.length);
DatagramPacket envoi = null;
socket.receive(paquet);
System.out.println("n"+paquet.getAddress());
int taille = paquet.getLength();
String donnees = new String(paquet.getData(),0, taille);
System.out.println("Donnees reçues = "+donnees);
String message = "Bonjour "+donnees;
System.out.println("Donnees envoyees = "+message);
envoi = new DatagramPacket(message.getBytes(),
message.length(), paquet.getAddress(), paquet.getPort());
socket.send(envoi);
}
}
}
//Exepmple_ClientUDP.java
import java.io.*;
import java.net.*;
public class Exemple_ClientUDP {
final static int port = 9632;
final static int taille = 1024;
static byte buffer[] = new byte[taille];
public static void main(String argv[]) throws Exception {
try {
InetAddress serveur = InetAddress.getByName(argv[0]);
int length = argv[1].length();
byte buffer[] = argv[1].getBytes();
DatagramSocket socket = new DatagramSocket();
DatagramPacket donneesEmises = new DatagramPacket(buffer, length, serveur,
port);
DatagramPacket donneesRecues = new DatagramPacket(new byte[taille], taille);
socket.send(donneesEmises);
socket.receive(donneesRecues);
System.out.println("Message : " + new String(donneesRecues.getData(),
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
37
0, donneesRecues.getLength()));
System.out.println("de : " + donneesRecues.getAddress() + ":" +
donneesRecues.getPort());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Résultat
Sur le Serveur:
/127.0.0.1
Donnees reçues = benbac
Donnees envoyees = Bonjour benbac
Sur le Client:
java Exemple_ClientUDP 127.0.0.1 "benbac"
Message : Bonjour benbac
de : /127.0.0.1:9632
Voici la version multithreaté du serveur (possibilité de traiter plusieurs clients à la fois).
Exemple Exemple_ServeurUDPThread.java
import java.net.*;
public class Exemple_ServeurUDPThread extends Thread {
protected DatagramSocket socket;
public static void main(String[] args) throws Exception {
try {
Exemple_ServeurUDPThread UDPThread = new Exemple_ServeurUDPThread();
UDPThread.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public Exemple_ServeurUDPThread() throws Exception{
socket = new DatagramSocket(9632);
}
public void run() {
try {
while (true) {
System.out.println("Lancement du serveur");
byte buffer[] = new byte[256];
DatagramPacket paquet = new DatagramPacket(buffer, buffer.length);
DatagramPacket envoi = null;
socket.receive(paquet);
System.out.println("n"+paquet.getAddress());
int taille = paquet.getLength();
String donnees = new String(paquet.getData(),0, taille);
System.out.println("Donnees reçues = "+donnees);
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
38
String message = "Bonjour "+donnees;
System.out.println("Donnees envoyees = "+message);
envoi = new DatagramPacket(message.getBytes(),
message.length(), paquet.getAddress(), paquet.getPort());
socket.send(envoi);
Thread.yield( );
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
c. La clase MulticastSocket
En plus du DatagramSocket qui permet aux programmes d'envoyer des paquets entre eux. Le
paquet java.net contient la classe MulticastSocket. Ce type de socket est utilisé au côté
client pour acquérir des paquets diffusé aux clients multiples par le serveur.
Les constructeurs sont les suivants :
Constructeur Rôle
MulticastSocket() Pour l'envoi des paquets.
MulticastSocket(int port) Pour la réception des paquets sur un port spécifié.
Les méthodes sont les suivantes :
Méthode Rôle
void joinGroup(InetAddress
mcastaddr)
La jointure avec à un groupe de diffusion.
leaveGroup(InetAddress mcastaddr) Abandonner le groupe de diffusion.
L'exemple suivant est un serveur d'horloge parlent, c'est-à-dire donne l'heure tous les secondes. Les
clients reçoivent l'heure à la demande.
Exemple
//Exepmple_ServeurMulticast.java
import java.io.*;
import java.net.*;
import java.util.*;
public class Exepmple_ServeurMulticast {
public static final int PORT = 8888;
public static final String GROUP = "229.69.69.69";
public static final byte TTL = 1;
public static void main(String[] args) {
byte[] recBuffer = new byte[512];
try {
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
39
MulticastSocket veille = new MulticastSocket();
InetAddress adrGroupe = InetAddress.getByName(GROUP);
while (veille != null) {
ByteArrayOutputStream boz = new ByteArrayOutputStream();
ObjectOutputStream oz = new ObjectOutputStream(boz);
oz.writeObject(new Date());
DatagramPacket sendPack = new DatagramPacket(boz.toByteArray(),
boz.size(), adrGroupe, PORT);
veille.send(sendPack, TTL);
try{
Thread.sleep(1000);
} catch (InterruptedException e){}
}
} catch (Exception e) {}
}
}
//Exepmple_ClientMulticast.java
import java.io.*;
import java.net.*;
import java.util.*;
public class Exemple_ClientMulticast {
public static final int PORT = 8888;
public static final String GROUP = "229.69.69.69";
public static void main(String[] args) {
MulticastSocket socket = null;
InetAddress adrGroupe = null;
byte[] recBuffer = new
byte[512];
try {
socket = new MulticastSocket(PORT);
adrGroupe = InetAddress.getByName(GROUP);
if (socket != null) {
socket.joinGroup(adrGroupe);
DatagramPacket recvPack = new DatagramPacket(recBuffer,
recBuffer.length);
for (int i = 0; i < 100; i++) {
socket.receive(recvPack);
ObjectInputStream inz = new ObjectInputStream(new
ByteArrayInputStream(recvPack.getData()));
Object obj = inz.readObject();
System.out.println(obj);
inz.close();
}
}
} catch (Exception e) {}
finally {
if (socket != null) {
try { socket.leaveGroup(adrGroupe);
} catch (Exception e) {}
}
}
}
}
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
40
3. Les URLs et JAVA
Java est défini tout un paquet pour la gestion et la manipulation des liens (URLs). Les classe
base sont : la classe URL pour la validation syntaxique des liens, la classe URLConnection pour
l'établissement d'une connexion avec une ressource et URLEncoder pour assuré le codage des URLs.
a. La classe URL
Un objet de cette classe encapsule une URL : la validité syntaxique de l'URL est assurée mais
l'existence de la ressource n'est pas assurée.
L'identification de la ressource indique le chemin d'accès de celle ci sur le serveur.
Le constructeur de la classe lève une exception du type MalformedURLException si la syntaxe de
l'URL n'est pas correcte.
Les objets créés sont constants et ne peuvent plus être modifiés par la suite.
Le fragment du code suivant levé une exception si la syntaxe de l'url fournit est erronée.
Exemple
import java.net.*;
public class Exemple_URL {
public static void main(String[] args) {
URL pageURL = null;
try {
pageURL = new URL("http:/javasun.com");
}
catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
La classe URL possède plusieurs méthodes pour obtenir les différents éléments qui composent l'URL,
parmi ces méthodes : getProtocol(), getHost(), getPort(), getFile().
La méthode openStream() ouvre un flux de données en entrée pour lire la ressource et renvoie un
objet de type InputStream.
La méthode openConnection ouvre une connexion vers la ressource et renvoie un objet de type
URLConnexion.
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
41
b. La classe URLConnection
Cette classe établir une connexion vers une ressource désignée par une URL pour obtenir un
flux de données ou des informations sur cette ressource.
L'exemple suivant récupère un fichier texte du serveur locale et le afficher. Le fichier test.txt doit être
accessible via le serveur web dans le répertoire "fichiers".
Exemple
import java.net.*;
import java.io.*;
public class Exemple_URLConnection {
public static void main(String[] args) {
try {
URL monURL = new URL("http://localhost/fichiers/teste.txt");
// Ouvrir la connexion et le flux de données
URLConnection connexion = monURL.openConnection();
InputStream flux = connexion.getInputStream();
// Renvoi la taille
int taille = connexion.getContentLength();
// Affichage du texte
for(;taille != 0; taille --)
System.out.print((char)flux.read());
flux.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
c. La classe URLEncoder
Cette classe est une classe utilitaire qui propose la méthode statique encode() pour encoder une
URL. Elle remplace notamment les espaces par un signe "+" et les caractères spéciaux par un signe
"%" suivi du code du caractère.
Exemple
import java.net.*;
public class Exemple_URLEncoder {
public static void main(String[] args) {
String url = "http://www.test.fr/images perso/mon image.gif";
System.out.println(URLEncoder.encode(url));
}
}
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
42
Résultat
http%3A%2F%2Fwww.test.fr%2Fimages+perso%2Fmon+image.gif
Dans l'exemple suivant en essaye de récupérer le logo de l'université de Laghouat.
Exemple
// Exemple_URLImage.java
import java.applet.Applet ;
import java.net.URL ;
import java.net.MalformedURLException ;
import java.awt.Graphics ;
import java.awt.Image ;
import java.awt.event.* ;
import java.awt.* ;
public class Exemple_URLImage extends Applet
implements ActionListener {
private Image image = null ;
private Button ok ;
public void init() {
setLayout(new BorderLayout());
add(ok = new Button("Téléchargement"),
BorderLayout.SOUTH);
ok.addActionListener(this) ;
}
public void paint(Graphics g) {
if ( image != null )
g.drawImage(image,0,0,this) ;
}
public void actionPerformed(ActionEvent e) {
try {
URL url = new URL("http://www.lagh-univ.dz/images/logo.jpg") ;
image = getImage(url) ;
repaint() ;
}
catch (MalformedURLException mue) { }
}
}
// Exemple_URLImage.html
<HTML>
<HEAD>
<TITLE>Téléchargement d'une image</TITLE>
</HEAD>
<BODY>
<H3>Télécharger le logo de l'université de Laghouat</H3>
<HR>
<DIV ALIGN=center>
<APPLET CODE="Exemple_URLImage.class" WIDTH="210" HEIGHT="210"></APPLET>
</DIV>
<HR>
</BODY>
</HTML>
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
43
Résultat
//appletviewer
Exemple_URLImage.html
Fig. 14 : Visualisation d'un
applet dans l'AppletViewer.
//Exemple_URLImage.html
Fig. 15 : Visualisation d'une page html dans le navigateur.
4. Les exceptions liées au réseau
Le package java.net définit plusieurs exceptions qui permettant de gérer les différentes
erreurs résultantes de l'exécution des ces classes et méthodes. Les exceptions sont héritées de
SocketException et IOException, Parmi ces exceptions :
Exception Description
BindException
Connexion au port local impossible : le port est
peut être déjà utilisé par une autre application.
ConnectException
Connexion à une socket impossible : aucun
serveur n'écoute sur le port précisé.
MalformedURLException L'URL n'est pas valide
NoRouteToHostException
Connexion à l'hôte impossible : un firewall
empêche la connexion
SocketTimeoutException
Délai d'attente pour le réception ou l'émission des
données écoulé
UnknownHostException L'adresse IP de l'hôte n'a pas pu être trouvée
Conclusion Programmation réseau en JAVA
44
Conclusion
près avoir quelques notions de base sur les réseaux dans le premier chapitre, et de mettre
l’accent sur le langage JAVA dans le deuxième chapitre et traité la programmation réseau en
JAVA dans le dernier chapitre en voie claire et nette la puissance et la souplesse de ce langage
dans divers domaines d’application et spécialement dans l’Internet et les réseaux interconnectées.
Mais malheureusement, à cause de l’absence d’une salle de TP et d’une connexion Internet,
nous n’avait pas l’occasion de développer une application en JAVA de messagerie qui turne sur un
réseau local. Tous les exemples d’écrit dans ce rapport ont été testés dans une machine locale.
JAVA est actuellement prend l'avantage complet de l'Internet en dominant ces principales aspects :
• Rechercher et visualisation des informations.
• Transmission des données.
• Jeux interactifs.
• Chat et messagerie.
• Commerce électronique.
• Actualités.
• Diffusion radio et TV.
• Conférence en ligne.
• …
En future, il semble que JAVA devient la plateforme la plus adéquate de tous type
d'applications réseau et spécialement l'Internet.
A
Bibliographie Programmation réseau en JAVA
45
Bibliographie
[01] Emmanuel Remy : Généralités sur java, http://emmanuel-remy.developpez.com.
[02] Dr. Irène Charon: Le langage Java concepts et pratique, 2éme
édition 2003.
[03] Dr.Bruce Eckel: Penser en Java, 2éme
édition 2000.
[04] Package pédagogique multimédia, 8éme
édition, Août 2006.
[05] Jean Michel DOUDOUX : Développons en Java, http://www.jmdoudoux.fr/java/.
[06] CISCO Academy American Network.
[07] Elliotte Rusty Harold : Java Network Programming, 2nd
Edition, O'Reilly.
[08] The Java Tutorials, : Custom Networking http://java.sun.com/docs/books/tutorial.
[09] Gilles ROUSSEL : Programmation réseau avec JAVA.
[10] Comment ça marche, http://commentcamarche.net.
[11] Didier Donsez, Programmation Réseau, Université de Valenciennes.
[12] Boukhalkhal Ahmed et Sahel Naima, Réalisation d’une application d’aide à l’administration sous
Windows NT.
Glossaire Programmation réseau en JAVA
47
Glossaire
API (Application Programming Interface)
Interface de programmation d'applications, contenant un ensemble de fonctions courantes de bas
niveau, bien documentées, permettant de programmer des applications.
Applet
Petit morceau de programme Java ayant des possibilités d'entrées-sorties aussi limitées que
possibles, et conçu généralement pour être exécuté au sein d'une page web.
Bytecode
Sorte de code objet, intermédiaire entre le source et le binaire exécutable, utilisé en Java pour
permettre un usage multi-plateforme de ce langage. Le code n'est donc pas directement
compréhensible par le processeur, ce qui peut provoquer certaines lenteurs. Le bytecode est exécuté
dans une VM (virtual machine).
Classe
Description abstraite des données et du comportement d'objets, ces objets étant similaires. Les
représentants de la classe sont appelés des instances.
Frame Une image, dans une animation.
FTP (File Transfer Protocol)
Protocole de transfert de fichier. Par extension, nom de l'utilitaire d'Unix utilisant le protocole
TCP/IP pour l’émission et la réception des fichiers avec un serveur de fichiers.
HTTP (HyperText Transfer Protocol)
Protocole de transmission dédié aux clients et aux serveurs du web.
Interpréteur
Langage qui traite les lignes du code source du programme les unes après les autres, au fur et à
mesure qu'il les parcourt. Par opposition à compilateur.
Glossaire Programmation réseau en JAVA
48
Java
Langage de programmation issu d'Oak et créé par Sun. Il est orienté réseau et objet, et sa syntaxe
est dérivée de celle du C.
Javabean
Les grains de café en provenance de Java plaisaient beaucoup aux développeurs du langage. Les
beans (ou Javabeans) sont des composants logiciels écrits en Java.
JVM (Java Virtual Machine)
Interpréteur du code Java qui permet l'exécution du programme, sur une machine en particulier.
Machine virtuelle
Machine abstraite simulée au sein d'une autre machine bien réelle celle-là, et utilisée comme
environnement d'exécution d'un langage portable de haut niveau.
Multithread Capacité à effectuer plusieurs tâches dans une seule application.
Navigateur
Type de logiciel utilisé pour naviguer sur les réseaux informatiques et dans leurs bases de données,
en particulier sur l'Internet et le web. En anglais, browser.
Oak
Langage de programmation créé par Sun en 1990 par une équipe baptisée « code Green ». Il a avait
être modifié et adapté, puis rebaptisé Java avec le succès qu'on lui connaît.
Objet
Un objet est donc un fourre-tout, qui peut être tout et n'importe quoi. Exemple de « définition
fondamentale » : « un objet possède un comportement et un état qui ne peut être modifié que par les
actions du comportement ».
Pseudo-code
Code intermédiaire entre le langage naturel et un langage informatique. Abrégé en P-code. On
utilise le même terme pour désigner le code intermédiaire entre un langage informatique et un
langage machine directement exécutable.
RMI (Remote Method Invocation)
Glossaire Programmation réseau en JAVA
49
Invocation (ou plus simplement appel) de méthode distante, mécanisme permettant d'utiliser sous
Java des objets distribués.
SDK ou JDK (Standard ou JAVA Development Kit)
C'est le kit destiné au programmeur. Ce kit est composé d'un JRE, d'un compilateur et de nombreux
programmes utiles, des exemples de programmes Java, les sources de toutes les classes de l'api.
Servlet
Applet destinée à être exécutée sur le serveur et non pas chez le client.
Socket
Norme (qui s'est imposée de fait) de mode de communication sur réseau, mis au point à Berkeley,
qui permet à une application de dialoguer avec un protocole.
Sun Microsystems, Inc.
Stanford University Network Workstation, puis ensuite (et maintenant)
Sun Microsystems Computers Corp. Entreprise et fabricant des station de
travail, une référence en matière de calcul mathématique et de réseau de micros. Ils sont à l'origine
des processeurs SPARC, de NFS qui est devenu un standard de fait, de Solaris, en plus, Sun est le
fondateur de JAVA.
TCP/IP (Transmission Control Protocol)
Les deux protocoles de communication qui forment les fondements de l'Internet
TCL (Tool Command Language)
C'est un langage de commande utilisé (par exemple) pour écrire des scripts CGI, sorte de LISP (vu
de loin) orienté sur le traitement de chaînes, autorisant les expressions algébriques et ayant une
syntaxe assez simple.
Web
Méthode d'exploitation de l'Internet, par l'usage de l'hypertexte, et mis au point par un chercheur du
CERN, Tim Berner-Lee.
World Wide Web (www)
La toile d'araignée mondiale des sites utilisant le protocole HTTP.

Contenu connexe

Tendances

Réseaux et protocoles - Cours + exercices
Réseaux et protocoles - Cours + exercices Réseaux et protocoles - Cours + exercices
Réseaux et protocoles - Cours + exercices sarah Benmerzouk
 
Rapport Projet Gestion des Etudiants avec C++
Rapport Projet Gestion des Etudiants avec C++Rapport Projet Gestion des Etudiants avec C++
Rapport Projet Gestion des Etudiants avec C++Saâd Zerhouni
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
applications-reparties
applications-repartiesapplications-reparties
applications-repartiesmourad50
 
Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3Saber LAJILI
 
Methodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxMethodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxInes Kechiche
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptionsAmir Souissi
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVABachir Benyammi
 
Conception et développement d’un système d’alerte et notification d’une tou...
Conception et développement  d’un système d’alerte et notification  d’une tou...Conception et développement  d’un système d’alerte et notification  d’une tou...
Conception et développement d’un système d’alerte et notification d’une tou...Bilel Khaled ☁
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfacesAmir Souissi
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de javaAmir Souissi
 
Administration Reseau
Administration ReseauAdministration Reseau
Administration Reseaudenischef1
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcminfcom
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismeMouna Torjmen
 
Introduction aux réseaux informatiques
Introduction aux réseaux informatiquesIntroduction aux réseaux informatiques
Introduction aux réseaux informatiquessarah Benmerzouk
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-CorrectionLilia Sfaxi
 

Tendances (20)

Tp n 6 linux
Tp n 6 linuxTp n 6 linux
Tp n 6 linux
 
Cours les technologies WAN
Cours les technologies WANCours les technologies WAN
Cours les technologies WAN
 
Réseaux et protocoles - Cours + exercices
Réseaux et protocoles - Cours + exercices Réseaux et protocoles - Cours + exercices
Réseaux et protocoles - Cours + exercices
 
Rapport Projet Gestion des Etudiants avec C++
Rapport Projet Gestion des Etudiants avec C++Rapport Projet Gestion des Etudiants avec C++
Rapport Projet Gestion des Etudiants avec C++
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
applications-reparties
applications-repartiesapplications-reparties
applications-reparties
 
Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3
 
Methodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locauxMethodes d'accès dans les réseaux locaux
Methodes d'accès dans les réseaux locaux
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptions
 
Programmation réseau en JAVA
Programmation réseau en JAVAProgrammation réseau en JAVA
Programmation réseau en JAVA
 
Conception et développement d’un système d’alerte et notification d’une tou...
Conception et développement  d’un système d’alerte et notification  d’une tou...Conception et développement  d’un système d’alerte et notification  d’une tou...
Conception et développement d’un système d’alerte et notification d’une tou...
 
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
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Chapitre 3 elements de base de java
Chapitre 3  elements de base de javaChapitre 3  elements de base de java
Chapitre 3 elements de base de java
 
Administration Reseau
Administration ReseauAdministration Reseau
Administration Reseau
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcm
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
 
Introduction aux réseaux informatiques
Introduction aux réseaux informatiquesIntroduction aux réseaux informatiques
Introduction aux réseaux informatiques
 
Modele mvc
Modele mvcModele mvc
Modele mvc
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 

En vedette

programmation réseau en java
programmation réseau en java programmation réseau en java
programmation réseau en java Ezéquiel Tsagué
 
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...Bachir Benyammi
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤Yuichi Sakuraba
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de donnéesFranck SIMON
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Saber LAJILI
 
Rapport application chat
Rapport application chatRapport application chat
Rapport application chatTbatou sanae
 
Autumn collection JavaOne 2014
Autumn collection JavaOne 2014Autumn collection JavaOne 2014
Autumn collection JavaOne 2014José Paumard
 
50 new things you can do with java 8
50 new things you can do with java 850 new things you can do with java 8
50 new things you can do with java 8José Paumard
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidHoussem Lahiani
 
Didactique de l'anglais : contexte, tâche, technologies
Didactique de l'anglais : contexte, tâche, technologiesDidactique de l'anglais : contexte, tâche, technologies
Didactique de l'anglais : contexte, tâche, technologiesShona Whyte
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8José Paumard
 
Introduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationIntroduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationTomcat Expert
 
In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionYann Caron
 
API Asynchrones en Java 8
API Asynchrones en Java 8API Asynchrones en Java 8
API Asynchrones en Java 8José Paumard
 

En vedette (20)

Formation1 sockets
Formation1 socketsFormation1 sockets
Formation1 sockets
 
programmation réseau en java
programmation réseau en java programmation réseau en java
programmation réseau en java
 
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤
 
Gwt jetty et sources de données
Gwt   jetty et sources de donnéesGwt   jetty et sources de données
Gwt jetty et sources de données
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
 
Hacking Tomcat
Hacking TomcatHacking Tomcat
Hacking Tomcat
 
Introduction aux-sockets
Introduction aux-socketsIntroduction aux-sockets
Introduction aux-sockets
 
Rapport application chat
Rapport application chatRapport application chat
Rapport application chat
 
Autumn collection JavaOne 2014
Autumn collection JavaOne 2014Autumn collection JavaOne 2014
Autumn collection JavaOne 2014
 
Le Réseau et Java
Le Réseau et JavaLe Réseau et Java
Le Réseau et Java
 
50 new things you can do with java 8
50 new things you can do with java 850 new things you can do with java 8
50 new things you can do with java 8
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'Android
 
Didactique de l'anglais : contexte, tâche, technologies
Didactique de l'anglais : contexte, tâche, technologiesDidactique de l'anglais : contexte, tâche, technologies
Didactique de l'anglais : contexte, tâche, technologies
 
50 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 850 nouvelles choses que l'on peut faire avec Java 8
50 nouvelles choses que l'on peut faire avec Java 8
 
Introduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 PresentationIntroduction to Apache Tomcat 7 Presentation
Introduction to Apache Tomcat 7 Presentation
 
In01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introductionIn01 - Programmation Android - 01 - introduction
In01 - Programmation Android - 01 - introduction
 
APACHE TOMCAT
APACHE TOMCATAPACHE TOMCAT
APACHE TOMCAT
 
API Asynchrones en Java 8
API Asynchrones en Java 8API Asynchrones en Java 8
API Asynchrones en Java 8
 

Similaire à Programmation réseau en JAVA

Chapitre 3 Comprendre la notion de socket.docx
Chapitre 3 Comprendre la notion de socket.docxChapitre 3 Comprendre la notion de socket.docx
Chapitre 3 Comprendre la notion de socket.docxKoffi Kanga
 
Administration reseau
Administration reseauAdministration reseau
Administration reseauRiadh Briki
 
Coursrseaux 111019081618-phpapp01
Coursrseaux 111019081618-phpapp01Coursrseaux 111019081618-phpapp01
Coursrseaux 111019081618-phpapp01Fabrice Enock
 
416769859360_chap2fondementdesreseaux2023.pdf
416769859360_chap2fondementdesreseaux2023.pdf416769859360_chap2fondementdesreseaux2023.pdf
416769859360_chap2fondementdesreseaux2023.pdfRihabBENLAMINE
 
Ch2_Les modèles OSI et TCP_IP.pptx
Ch2_Les modèles OSI et TCP_IP.pptxCh2_Les modèles OSI et TCP_IP.pptx
Ch2_Les modèles OSI et TCP_IP.pptxOthmaneMansouri1
 
Priorité des flux
Priorité des fluxPriorité des flux
Priorité des fluxbuffy14
 
CoAP master presentaion
CoAP master presentaionCoAP master presentaion
CoAP master presentaionTarik Sefiri
 
Fonctionnalités et protocoles des couches applicatives
Fonctionnalités et protocoles des couches applicativesFonctionnalités et protocoles des couches applicatives
Fonctionnalités et protocoles des couches applicativesfadelaBritel
 
TelCar : Solution de lecture des informations de bord de véhicule
TelCar : Solution de lecture des informations de bord de véhiculeTelCar : Solution de lecture des informations de bord de véhicule
TelCar : Solution de lecture des informations de bord de véhiculeGhassen Chaieb
 
Deploiement_Lora_exo.pdf
Deploiement_Lora_exo.pdfDeploiement_Lora_exo.pdf
Deploiement_Lora_exo.pdfmerazgaammar2
 
End year project: Monitoring a wireless sensors network with internet of things
End year project: Monitoring a wireless sensors network with internet of thingsEnd year project: Monitoring a wireless sensors network with internet of things
End year project: Monitoring a wireless sensors network with internet of thingsAmine Moula
 
LES RESEAUX INFORMATIQUES.pdf
LES RESEAUX INFORMATIQUES.pdfLES RESEAUX INFORMATIQUES.pdf
LES RESEAUX INFORMATIQUES.pdfssuser18776b
 

Similaire à Programmation réseau en JAVA (20)

01 tcpip
01 tcpip01 tcpip
01 tcpip
 
Chapitre 3 Comprendre la notion de socket.docx
Chapitre 3 Comprendre la notion de socket.docxChapitre 3 Comprendre la notion de socket.docx
Chapitre 3 Comprendre la notion de socket.docx
 
Administration reseau
Administration reseauAdministration reseau
Administration reseau
 
Coursrseaux 111019081618-phpapp01
Coursrseaux 111019081618-phpapp01Coursrseaux 111019081618-phpapp01
Coursrseaux 111019081618-phpapp01
 
Cours réseaux
Cours réseauxCours réseaux
Cours réseaux
 
cours-gratuit.com--id-5598.pdf
cours-gratuit.com--id-5598.pdfcours-gratuit.com--id-5598.pdf
cours-gratuit.com--id-5598.pdf
 
Web services
Web servicesWeb services
Web services
 
Administration reseau
Administration reseauAdministration reseau
Administration reseau
 
416769859360_chap2fondementdesreseaux2023.pdf
416769859360_chap2fondementdesreseaux2023.pdf416769859360_chap2fondementdesreseaux2023.pdf
416769859360_chap2fondementdesreseaux2023.pdf
 
Ch2_Les modèles OSI et TCP_IP.pptx
Ch2_Les modèles OSI et TCP_IP.pptxCh2_Les modèles OSI et TCP_IP.pptx
Ch2_Les modèles OSI et TCP_IP.pptx
 
8-socket.pdf
8-socket.pdf8-socket.pdf
8-socket.pdf
 
(protocoles)
(protocoles)(protocoles)
(protocoles)
 
Priorité des flux
Priorité des fluxPriorité des flux
Priorité des flux
 
CoAP master presentaion
CoAP master presentaionCoAP master presentaion
CoAP master presentaion
 
Fonctionnalités et protocoles des couches applicatives
Fonctionnalités et protocoles des couches applicativesFonctionnalités et protocoles des couches applicatives
Fonctionnalités et protocoles des couches applicatives
 
TelCar : Solution de lecture des informations de bord de véhicule
TelCar : Solution de lecture des informations de bord de véhiculeTelCar : Solution de lecture des informations de bord de véhicule
TelCar : Solution de lecture des informations de bord de véhicule
 
Chap7 java net
Chap7 java netChap7 java net
Chap7 java net
 
Deploiement_Lora_exo.pdf
Deploiement_Lora_exo.pdfDeploiement_Lora_exo.pdf
Deploiement_Lora_exo.pdf
 
End year project: Monitoring a wireless sensors network with internet of things
End year project: Monitoring a wireless sensors network with internet of thingsEnd year project: Monitoring a wireless sensors network with internet of things
End year project: Monitoring a wireless sensors network with internet of things
 
LES RESEAUX INFORMATIQUES.pdf
LES RESEAUX INFORMATIQUES.pdfLES RESEAUX INFORMATIQUES.pdf
LES RESEAUX INFORMATIQUES.pdf
 

Plus de Bachir Benyammi

NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
Cadre pour l'amélioration de la cybersécurité des infrastructures critiques, ...
Cadre pour l'amélioration de la cybersécurité des infrastructures critiques, ...Cadre pour l'amélioration de la cybersécurité des infrastructures critiques, ...
Cadre pour l'amélioration de la cybersécurité des infrastructures critiques, ...Bachir Benyammi
 
Déclaration d'applicabilité (DdA) - ISO27002:2013
Déclaration d'applicabilité (DdA) - ISO27002:2013Déclaration d'applicabilité (DdA) - ISO27002:2013
Déclaration d'applicabilité (DdA) - ISO27002:2013Bachir Benyammi
 
Organigramme de la mise en œuvre du SMSI et processus de certification ISO 27...
Organigramme de la mise en œuvre du SMSI et processus de certification ISO 27...Organigramme de la mise en œuvre du SMSI et processus de certification ISO 27...
Organigramme de la mise en œuvre du SMSI et processus de certification ISO 27...Bachir Benyammi
 
كل ما تحب معرفته عن محرك البحث قوقل (Google)
كل ما تحب معرفته عن محرك البحث قوقل (Google)كل ما تحب معرفته عن محرك البحث قوقل (Google)
كل ما تحب معرفته عن محرك البحث قوقل (Google)Bachir Benyammi
 
Réalisation d'un site web dynamique mobile pour Air Algérie
Réalisation d'un site web dynamique mobile pour Air AlgérieRéalisation d'un site web dynamique mobile pour Air Algérie
Réalisation d'un site web dynamique mobile pour Air AlgérieBachir Benyammi
 
Evolution des exportations de marchandises en Algérie de de 1992 à 2004
Evolution des exportations de marchandises en Algérie de de 1992 à 2004Evolution des exportations de marchandises en Algérie de de 1992 à 2004
Evolution des exportations de marchandises en Algérie de de 1992 à 2004Bachir Benyammi
 
Simulation d’un système à temps partagé
Simulation d’un système à temps partagéSimulation d’un système à temps partagé
Simulation d’un système à temps partagéBachir Benyammi
 
الموقع الإلكتروني لمصحة الواحات للتشخيص و العلاج
الموقع الإلكتروني لمصحة الواحات للتشخيص و العلاجالموقع الإلكتروني لمصحة الواحات للتشخيص و العلاج
الموقع الإلكتروني لمصحة الواحات للتشخيص و العلاجBachir Benyammi
 
Réalisation d’un site web pour la Clinique des Oasis Ghardaïa
Réalisation d’un site web pour la Clinique des Oasis GhardaïaRéalisation d’un site web pour la Clinique des Oasis Ghardaïa
Réalisation d’un site web pour la Clinique des Oasis GhardaïaBachir Benyammi
 
Le périphérique souris
Le périphérique sourisLe périphérique souris
Le périphérique sourisBachir Benyammi
 
L'équipe de développement
L'équipe de développementL'équipe de développement
L'équipe de développementBachir Benyammi
 
L'équipe de développement
L'équipe de développementL'équipe de développement
L'équipe de développementBachir Benyammi
 
Le périphérique souris (programmation)
Le périphérique souris (programmation)Le périphérique souris (programmation)
Le périphérique souris (programmation)Bachir Benyammi
 
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...Bachir Benyammi
 
Réalisation d'un compilateur de mini langage - Khawarizmi
Réalisation d'un compilateur  de mini langage - KhawarizmiRéalisation d'un compilateur  de mini langage - Khawarizmi
Réalisation d'un compilateur de mini langage - KhawarizmiBachir Benyammi
 
Réalisation d’un interpréteur en langue Arabe - Khawarizmi
Réalisation d’un interpréteur en langue Arabe - KhawarizmiRéalisation d’un interpréteur en langue Arabe - Khawarizmi
Réalisation d’un interpréteur en langue Arabe - KhawarizmiBachir Benyammi
 

Plus de Bachir Benyammi (17)

NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
Cadre pour l'amélioration de la cybersécurité des infrastructures critiques, ...
Cadre pour l'amélioration de la cybersécurité des infrastructures critiques, ...Cadre pour l'amélioration de la cybersécurité des infrastructures critiques, ...
Cadre pour l'amélioration de la cybersécurité des infrastructures critiques, ...
 
Déclaration d'applicabilité (DdA) - ISO27002:2013
Déclaration d'applicabilité (DdA) - ISO27002:2013Déclaration d'applicabilité (DdA) - ISO27002:2013
Déclaration d'applicabilité (DdA) - ISO27002:2013
 
Organigramme de la mise en œuvre du SMSI et processus de certification ISO 27...
Organigramme de la mise en œuvre du SMSI et processus de certification ISO 27...Organigramme de la mise en œuvre du SMSI et processus de certification ISO 27...
Organigramme de la mise en œuvre du SMSI et processus de certification ISO 27...
 
كل ما تحب معرفته عن محرك البحث قوقل (Google)
كل ما تحب معرفته عن محرك البحث قوقل (Google)كل ما تحب معرفته عن محرك البحث قوقل (Google)
كل ما تحب معرفته عن محرك البحث قوقل (Google)
 
Réalisation d'un site web dynamique mobile pour Air Algérie
Réalisation d'un site web dynamique mobile pour Air AlgérieRéalisation d'un site web dynamique mobile pour Air Algérie
Réalisation d'un site web dynamique mobile pour Air Algérie
 
Evolution des exportations de marchandises en Algérie de de 1992 à 2004
Evolution des exportations de marchandises en Algérie de de 1992 à 2004Evolution des exportations de marchandises en Algérie de de 1992 à 2004
Evolution des exportations de marchandises en Algérie de de 1992 à 2004
 
Simulation d’un système à temps partagé
Simulation d’un système à temps partagéSimulation d’un système à temps partagé
Simulation d’un système à temps partagé
 
الموقع الإلكتروني لمصحة الواحات للتشخيص و العلاج
الموقع الإلكتروني لمصحة الواحات للتشخيص و العلاجالموقع الإلكتروني لمصحة الواحات للتشخيص و العلاج
الموقع الإلكتروني لمصحة الواحات للتشخيص و العلاج
 
Réalisation d’un site web pour la Clinique des Oasis Ghardaïa
Réalisation d’un site web pour la Clinique des Oasis GhardaïaRéalisation d’un site web pour la Clinique des Oasis Ghardaïa
Réalisation d’un site web pour la Clinique des Oasis Ghardaïa
 
Le périphérique souris
Le périphérique sourisLe périphérique souris
Le périphérique souris
 
L'équipe de développement
L'équipe de développementL'équipe de développement
L'équipe de développement
 
L'équipe de développement
L'équipe de développementL'équipe de développement
L'équipe de développement
 
Le périphérique souris (programmation)
Le périphérique souris (programmation)Le périphérique souris (programmation)
Le périphérique souris (programmation)
 
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
Étude et réalisation d’une application de contrôle d’un PC à distance en JAVA...
 
Réalisation d'un compilateur de mini langage - Khawarizmi
Réalisation d'un compilateur  de mini langage - KhawarizmiRéalisation d'un compilateur  de mini langage - Khawarizmi
Réalisation d'un compilateur de mini langage - Khawarizmi
 
Réalisation d’un interpréteur en langue Arabe - Khawarizmi
Réalisation d’un interpréteur en langue Arabe - KhawarizmiRéalisation d’un interpréteur en langue Arabe - Khawarizmi
Réalisation d’un interpréteur en langue Arabe - Khawarizmi
 

Dernier

Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsRajiAbdelghani
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeXL Groupe
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSKennel
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSKennel
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETMedBechir
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Gilles Le Page
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSKennel
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 37
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSKennel
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETMedBechir
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .Txaruka
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSKennel
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Alain Marois
 

Dernier (19)

Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
Principe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 tempsPrincipe de fonctionnement d'un moteur 4 temps
Principe de fonctionnement d'un moteur 4 temps
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
Le Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directeLe Lean sur une ligne de production : Formation et mise en application directe
Le Lean sur une ligne de production : Formation et mise en application directe
 
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_FormationRecherche.pdf
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdfSciencesPo_Aix_InnovationPédagogique_Bilan.pdf
SciencesPo_Aix_InnovationPédagogique_Bilan.pdf
 
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSETCours SE Le système Linux : La ligne de commande bash - IG IPSET
Cours SE Le système Linux : La ligne de commande bash - IG IPSET
 
Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024Presentation de la plateforme Moodle - avril 2024
Presentation de la plateforme Moodle - avril 2024
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_EtudiantActeur.pdf
 
DO PALÁCIO À ASSEMBLEIA .
DO PALÁCIO À ASSEMBLEIA                 .DO PALÁCIO À ASSEMBLEIA                 .
DO PALÁCIO À ASSEMBLEIA .
 
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdfBibdoc 2024 - Ecologie du livre et creation de badge.pdf
Bibdoc 2024 - Ecologie du livre et creation de badge.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_IA.pdf
 
Cours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSETCours SE Gestion des périphériques - IG IPSET
Cours SE Gestion des périphériques - IG IPSET
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .Annie   Ernaux  Extérieurs. pptx. Exposition basée sur un livre .
Annie Ernaux Extérieurs. pptx. Exposition basée sur un livre .
 
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdfSciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
SciencesPo_Aix_InnovationPédagogique_Conférence_SK.pdf
 
Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024Zotero avancé - support de formation doctorants SHS 2024
Zotero avancé - support de formation doctorants SHS 2024
 

Programmation réseau en JAVA

  • 1. REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE MINISTERE D’ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE Faculté Des Sciences Et De L’ingénierie Institue De Génie Informatique Module Réseau et Communication 4 éme Année Informatique Réalisé par : BENYAMMI Bachir HASSANI Mustapha OULD BAHAMMOU Abdelaziz Encadré par : Mr. BOUKHELKHAL Ahmed Année Universitaire 2006-2007
  • 2. Sommaire Programmation réseau en JAVA Sommaire Sommaire général : Introduction 02 I - Réseaux : Notions de bases 03 1. L'architecture Client / Serveur 03 2. Modèle OSI 04 3. Le modèle TCP/IP 04 4. Le protocole TCP 05 5. Le protocole UDP 05 6. Le protocole IP 06 7. Les ports 06 8. Les Sockets 06 9. La diffusion 07 10. L'accès aux ressources via une URL 08 II - Introduction au JAVA 09 1. Historique 09 2. Les Caractéristiques de Java 10 2.1 La Simplicité offerte par java 10 2.2 Conçu pour fonctionner sur le Web 11 2.3 Un langage indépendant de toute plate-forme 12 2.3.1 Programmes multi plates formes Java 12 2.3.2 Bytecode et Compilation native 13 2.3.3 La machine virtuelle Java 14 2.4 Java est totalement adapté au réseau 15 2.5 Java est multitâche 16 2.6 Java permet l'exécution dynamique 16 2.7 Composants logiciels réutilisables 16 2.8 Java assure la Sécurité 16 2.9 Java est robuste 16 2.10 Les JSP 17 2.11 Les servlets 18 2.12 La technologie RMI 19 3. Généralité sur Java 20 3.1 Les avantages de Java 20 3.2 Comparer le langage Java 20 4. Le Java Développement Kit (JDK) 21 5. Les techniques de base de programmation en Java 22 5.1 La compilation d'un code source 22 5.2 L'exécution d'un programme et d'une applet 23
  • 3. Sommaire Programmation réseau en JAVA III - JAVA et la programmation réseau 24 Le paquet java.net 25 1. Les adresses Internet et JAVA 25 1.1 La classe InetAddress 25 1.2 La classe NetworkInterface 27 2. La communication par des sockets et JAVA 28 2.1 Utilisation du protocole TCP 28 a. La classe SocketServer 29 b. La classe Socket 32 2.2 Utilisation du protocole UDP 34 a. La classe DatagramSocket 34 b. La classe DatagramPacket 35 c. La clase MulticastSocket 38 3. Les URLs et JAVA 40 a. La classe URL 40 b. La classe URLConnection 41 c. La classe URLEncoder 41 4. Les exceptions liées au réseau 43 Conclusion 44 Bibliographie 45 Glossaire 47 Sommaire des figures: Fig. 1 : L'architecture Client / Serveur 03 Fig. 2 : Le modèle TCPIP 04 Fig. 3 : Communication par Sockets 07 Fig. 4 : Java permet à une personne de jouer contre un adversaire 11 Fig. 5 : Le pseudo-code de Java. 12 Fig. 6 : Java est un compilateur neutre. 13 Fig. 7 : Le bytecode Java 13 Fig. 8 : Fonctionnement de la JVM 14 Fig. 9 : Un synoptique de la machine virtuelle Java 14 Fig. 10 : L’adaptation aux réseaux de Java 15 Fig. 11 : Compilation par une commande. 23 Fig. 12 : Communication par TCP 28 Fig. 13 : Communication par UDP 34 Fig. 14 : Visualisation d'un applet dans l'AppletViewer. 43 Fig. 15 : Visualisation d'une page html dans le navigateur. 43
  • 4. Introduction Programmation réseau en JAVA 2 Introduction es réseaux informatiques représentent le noyau qui garantie le bon fonctionnement de toutes organismes, ils influents de plus en plus notre vie courante. A cause des divers services offerts, tel que la messagerie, les forums de discussion, les transactions bancaires, la navigation Web… Le langage JAVA a prévu son efficacité et ça souplesse dans le développement des applications réseaux et Internet, il est devenu indispensable pour la programmation Web. Le but de ce mini-projet est d’avoir une connaissance globale sur le développement des applications réseaux en JAVA, ainsi que l’utilisation des différents protocoles et les techniques de communication. Les divers outils utilisés dans notre travail sont : • JDK 1.6 : pour le développement. • JRE 1.6 : pour l’exécution et le teste des programmes. • NetBeans 5.5 : l’IDE de développement. • 02 Machines (PC + Portable) liés entre eux. • Visio 2003 : pour la réalisation des schémas explicatifs. L
  • 5. Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA Chapitre 1 Réseaux : Notions de bases n réseau informatique est constitué d'un ensemble d'ordinateurs et de périphériques interconnectés. Un nœud du réseau qui correspond à un ordinateur est généralement appelé hôte U 1. L'architecture Client / Serveur Le mode de communication qu'un hôte établit avec un autre hôte qui fournit un service quelconque est désigné par le terme Client/Serveur. Le processus de communication est comme suit : • Le client lance une requête pour l'acquisition d'une ressource (Texte, Image, Son, …). • Le serveur exécute la requête (lancement des scripts, communication avec une BDD, …). • Le résultat de la requête (la réponse) est envoyé au client. Fig. 1 : L'architecture Client / Serveur 3
  • 6. Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA Dans les applications Client/Serveur; la liaison se fait généralement entre deux ordinateur, l'un des deux joue le rôle de serveur et l'autre celui de client. Le serveur fournit quelques services, comme l'exécution des requêtes de base de données, Le client en parallèle consomme ces services, comme l'affichage du résultat de la requête. 2. Modèle OSI OSI est un modèle théorique présentant la circulation des données dans un réseau, il présente très précisément la liaison qui existe entre deux nœuds successifs d'un réseau d'une manière descendante et décomposée. Il est décrit en 7 couches : Application, Présentation, Session, Transport, Réseau, Liaison et Physique. Ce modèle est mis au point par l'organisation internationale des standards (ISO) afin de normaliser les communications entre ordinateurs. 3. Le modèle TCP/IP (Transmission Control Protocol/Internet Protocol) TCP/IP est l'architecture réseau la plus répandue. Le modèle est fondu sur OSI où 04 couches sont présentées : Application, Transport, Réseau et Liaison. L'architecture TCP/IP inclut de nombreux services d'application, des protocoles élaborés et complexes, sur lesquels les applications distribuées peuvent s'appuyer. TCP/IP représente d'une certaine façon l'ensemble des règles de communication sur Internet et se base sur la notion adressage IP, c'est-à-dire le fait de fournir une adresse IP à chaque machine du réseau afin de pouvoir acheminer des paquets de données. Les fonctions essentielles du TCP/IP sont : • Le fractionnement des messages en paquets. • L'utilisation d'un système d'adresses . • L'acheminement des données sur le réseau (routage). • Le contrôle des erreurs de transmission de données . • … Le schéma suivant précise les diverses couches TCP/IP où interviennent les différents protocoles. Fig. 2 : Le modèle TCPIP 4
  • 7. Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA Lorsque vous écrivez un programme qui tourne sur un réseau; vous programmez à la couche Application. Pratiquement vous être pas concerner par les protocoles TCP et UDP. Mais vous pouvez utiliser les classes du paquet java.net. Ces classes fournissant la communication indépendamment des systèmes sur les quelle ils sont introduites. Cependant, pour décider quelles classes votre programme devrait utiliser; vous avez besoin de comprendre la différence entre le TCP et le UDP. 4. Le protocole TCP (Transmission Control Protocol) Quand deux applications veulent communiquent entre eux (comme un appel téléphonique), ils utilisent un support de transmission, en envoient et recevaient sur ce support. Le TCP garantie l'envoi des données entre les deux applications (comme l'opérateur téléphonique), autrement une erreur est signalée. Ce mode de communication est appelé : Mode connecté. TCP est un protocole qui permet une connexion de type point à point entre deux applications. C'est un protocole fiable qui garantit la réception dans l'ordre d'envoi des données. En contre partie, ce protocole offre de moins bonnes performances mais c'est le prix à payer pour la fiabilité. En utilisant la notion de port, plusieurs applications sur la même machine peuvent utiliser TCP en même temps. 5. Le protocole UDP (User Datagram Protocol) Le protocole UDP assure une communication non garantie entre deux applications sur un réseau par envoient des paquets indépendants de données (datagrams) d'une application à une autre. Comme l'envoi d'un courrier à travers le service postal, l'ordre de la livraison n'est pas important et non garantie. Chaque paquet est indépendant de l'autre. La communication est dite : Mode non connecté. Ce protocole offre de bonnes performances car il est très rapide par rapport du TCP, mais ne garanti pas l'envoi dans l'ordre fourni des données, il est pratiquement réservé à des taches peu importantes. Pour assurer les échanges, UDP utilise la notion de port, ce qui permet à plusieurs applications d'utiliser UDP sans que les échanges interfèrent les uns avec les autres. UDP est utilisé dans de nombreux services tel que echo (port 7), DayTime (13), etc. ... et dans plusieurs applications peer-to-peer (Ex: Emule, Kazaa, ...). 5
  • 8. Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA Une différence importante au niveau de l'utilisation des ports TCP et UDP est que le TCP réserve pour chaque connexion une file d'attente de messages, au contraire du UDP qui associé à chaque port sa propre file d'attente. 6. Le protocole IP (Internet Protocol) Le protocole IP dans la couche réseau du TCP/IP se préoccupe de routage et de contrôle dans les réseaux interconnectés. Il permet également l'échange de datagrammes (en mode non connecté), entre des hôtes connectés à des réseaux physiques divers. Le protocole IP est un protocole ouvert et indépendant du système. Des nœuds d'un réseau sont potentiellement reliés par plusieurs chemins. Chaque paquet suit un chemin particulier pour attendre ça destination, mais une succession de paquets provenant d'un même bloc de données ne suivent pas forcément le même chemin. Pour programmer via le protocole IP en utilise le TCP ou le UDP. 7. Les ports La liaison d'un ordinateur avec un réseau ce fait par une connexion physique unique. Mais les données passent par cette connexion sont utilisées par diverses applications (ou protocoles). Les ports sont utilisés pour distinguer les données propriétaires à chaque processus. A cause de diversité des services fournissent par un serveur, quelque port sont réservés à des services bien spécifié (Ex : HTTP (80), FTP (21), SMTP (25), …). Ces ports sont appelles (Well Known Ports). Chaque machine sous IP possède quelques 65 535 ports, de 1 à 1024 sont des ports réservés aux services fondamentaux, de 1025 jusqu'au 5000 sont disponibles aux utilisateurs. 8. Les Sockets La notion de sockets a été introduite dans l'Unix BSD, Il s'agit d'un modèle permettre à divers processus de communiquer aussi bien sur une même machine qu'à travers un réseau TCP/IP . Les sockets se situent dans la couche transport (protocoles UDP ou TCP), elle-même utilisant les services de la couche réseau. Dans une communication ; au moins 2 sockets sont utilisées, chaque socket est identifié par une adresse IP et un numéro du port. 6
  • 9. Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA Fig. 3 : Communication par Sockets 9. La diffusion Le protocole IP a prévu de pouvoir envoyer des paquets à plusieurs machines sans faire la duplication de ces paquets. Pour garantir transmission des paquets par la diffusion; les routeurs doivent accepter le passage de ces paquets, et les serveurs de diffusion doivent posséder une adresse IP de classe D, c'est-à-dire un numéro compris entre 224.0.0.1 et 239.255.255.255 (toutes ces adresses sont déjà réservées). Lorsqu'on diffuse un paquet celui-ci à la possibilité de parcourir tout l'Internet. Pour éviter ce chemin; Les paquets possède un champ entier appelé TTL (Time To Live), qui est décrémenté à chaque passage dans les routeurs (souvent de la valeur 1). Lorsque cette valeur passe à 0, le routeur détruit le paquet et ne le diffuse pas. Dans le cas d'un paquet en diffusion, on doit explicitement spécifier la valeur de ce champ : • 1 = le paquet reste dans le réseau local. • 16 = le paquet reste dans la région. • 127 = le paquet est envoyé au monde entier. 7
  • 10. Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA 10. L'accès aux ressources via une URL Une URL (Uniform Resource Locator) ou locateur de ressource uniforme est une chaîne de caractères qui désigne une ressource précise accessible par Internet ou Intranet. Une URL est donc une référence à un objet dont le format dépend du protocole utilisé pour accéder à la ressource. • Dans le cas du protocole HTTP, l'URL est de la forme : http://<serveur>:<port>/<chemin>?<param1>&<param2>&...&<paramn> Elle se compose du protocole HTTP, d'une adresse IP ou du nom du serveur avec numéro de port (80 par défaut), un chemin d'accès vers un fichier ou un nom de service et éventuellement des paramètres sous la forme clé=valeur. Exemple http://www.google.com/convert?value=100&src=miles&dist=kilometers • Dans le cas du protocole FTP, l'URL est de la forme : ftp://<user>:<motdepasse>@<serveur>:<port>/<chemin> Où l'URL est composée d'un compte d'utilisateur et un mot de passe avec le nom du serveur qu'il veut y accéder. Le port par défaut du FTP est 21. Exemple ftp://benbac:2007dz47@free.fr/siteperso • Dans le cas d'un e-mail, l'URL est de la forme mailto:<email> Exemple mailto:benbac20@gmail.com • Dans le cas d'un fichier local, l'URL est de la forme : file://<serveur>/<chemin> Elle se compose de la désignation du serveur (non utilisé dans le cas du système de fichier local) et du chemin absolu de la ressource. Exemple file:///C:/My%20documents/Mes%20images/logo.jpg 8
  • 11. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 9 Introduction au JAVA ans ce chapitre on va mètre l’accent sur le langage Java, on lui définir de façon général et un peut précise car pour d’écrire un tel langage surtout quant il s’agit d’un langage à objet il faut écrire un grand ouvrage. Alors comme tout n'importe quel langage humain, Java permet d'exprimer des concepts. S'il y parvient, il deviendra un moyen d'expression considérablement plus simple et plus souple que n'importe quelle alternative, alors même que les problèmes augmentent en taille et en complexité. C’est un langage à objets qui permet d’écrire de façon simple et claire des programmes portables sur la majorité des plates-formes. Lié à l’essor du World Wide Web. Il a été conçu par l’équipe de James Gosling en fonction des multiples exigences des développements informatiques actuels [2]. 1. Historique [1] : Le langage Java fut développé par Sun Microsystems en 1991 dans le cadre du projet Green, groupe de recherche spécialisé dans le développement de logiciels conçus pour contrôler des appareils électroniques. Pour mettre en pratique les résultats de leurs travaux, les chercheurs du projet Green développèrent un prototype appelé Star7, gadget qui ressemblait à une télécommande de téléviseur, capable de communiquer avec ses semblables. L'idée de départ était de développer le système d'exploitation de la télécommande Star7 en C++. Toutefois, l'un des membres du projet Green, James Gosling, en eut rapidement assez des contraintes que posait ce langage. Il s'enferma dans son bureau et conçut un nouveau langage mieux adapté aux spécificités de Star7. Le langage fut d'abord nommé Oak, mais le groupe Green s'aperçut ensuite que ce nom était déjà utilisé dans le domaine de l'informatique. Etant destiné à être utilisé avant tout avec des appareils électroniques, et non avec des PC modernes, Java se devait d'être un langage peu encombrant, performant et facile à porter pour un large éventail d'appareils. Il se devait aussi d'être fiable. Chapitre 2 D
  • 12. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 10 Bien que Java ait été conçu initialement comme un outil destiné aux appareils électriques et au développement d'une télévision interactive, Alors c’est les caractéristiques qui le rendaient intéressant pour le standard Star7 le rendirent aussi intéressant pour le World Wide Web. Afin de mettre en évidence le potentiel de Java et d'éviter que le fruit de leurs recherches finisse dans un placard, les membres du projet Green créèrent en 1994 un navigateur Web capable de faire fonctionner des applets Java. Ce navigateur mit en évidence deux choses à propos de Java : ce qu'il offrait au World Wide Web et le type de programmes que Java permettait de créer. Les programmeurs Patrick Naughton et Jonathan Peayne utilisèrent Java pour créer ce navigateur, initialement appelé WebRunner, mais qui fut renommé HotJava. Bien que Java et le navigateur HotJava soient parvenus à attirer l'attention de la communauté du Web, le langage ne commença vraiment à s'imposer que quand Netscape, la première société à s'intéresser concrètement à ce langage, signa au mois d'août 1995 un contrat de licence l'autorisant à l'utiliser. Marc Andreesen, cadre dirigeant de Netscape et multimillionnaire, fut l'un des premiers décideurs étrangers à Sun à percevoir l'intérêt de Java, et il gratifia ce langage d'un soutien marqué lors de la conférence Java0ne de mai 1996. "Java est une opportunité très intéressante pour nous tous", déclara t-il aux participants. Peu après la sortie publique de la première version de Java, la société Sun cibla ses efforts de développement pour Java et elle recruta plusieurs centaines de nouveaux employés pour continuer à développer le langage. 2. Les Caractéristiques de Java: Java est orientée objet il bénéficie d’une gigantesque bibliothèque de « classes» avec les quelles il est aisé de composer des interfaces graphiques, de créer des applications « multithread», de communiquer entre ordinateurs, etc. L’utilisation de Java s’étend de l’animation d’une page HTML par une « applet» à des applications complexes qui tournent à travers le réseau Internet : forums de discussion, partage de bases de données, jeux, etc… [2]. Enfin on trouve de plus en plus fréquemment le langage Java dans les systèmes embarqués. Java possède un certain nombre de caractéristiques qui ont largement contribué à son énorme succès 2.1 La Simplicité offerte par java : Nous avons voulu créer un système qui puisse être programmé simplement sans nécessiter un apprentissage ésotérique, et qui tire parti de l'expérience standard actuelle. Java a été conçu de façon relativement proche de C++ pour faciliter la compréhension du système. De nombreuses fonctions
  • 13. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 11 compliquées, mal comprises, rarement utilisées de C++, qui nous semblaient par expérience apporter plus d'inconvénients que d'avantages, ont été supprimées de Java. 2.2 Conçu pour fonctionner sur le Web: Applet En effet, Java a été Conçue pour fonctionner très sûrement sur le Web. Les navigateurs de web comme Navigator de Netscape et Internet Explorer de Microsoft, permettent de télécharger un programme Java sur le L’Internet et de le faire fonctionner localement sur le système de l'utilisateur du Web. Ces programmes, appelés Applets, se présentent comme des images sur une page Web. Contrairement aux images, toutefois, les applets peuvent être interactives c'est-à-dire admettre des données entrées par l'utilisateur, y répondre et présenter du contenu capable d'évoluer en permanence. Les applets peuvent servir à créer des animations, des figures, des jeux, des formulaires capables de réagir à des informations entrées par l'utilisateur, ou tout autre type d'effets interactifs sur une même page Web, au milieu d'éléments de texte et de graphismes [1].La Figure suivante (Figure 4) illustre une Applet (jeu). Fig. 4 : Java permet à une personne de jouer contre un adversaire
  • 14. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 12 2.3 Un langage indépendant de toute plate-forme : Application Java est un langage indépendant de toute plate-forme, ce qui signifie qu'un même programme peut fonctionner sur différentes plates-formes et sous différents systèmes d'exploitation. C'est là l'un des principaux avantages de Java par rapport à d'autres langages de programmation. 2.3.1 Programmes multi plates formes Java : Si les programmes Java sont indépendants de toute plate-forme, c'est parce qu'ils reposent sur une machine virtuelle, qui est une sorte d'ordinateur installé à l'intérieur de l'ordinateur physique dont se sert l'utilisateur. Cette machine virtuelle prend les programmes Java compilés et convertit leurs instructions en commandes compréhensibles pour un système d'exploitation. Le même programme compilé, qui se présente sous un format appelé pseudo-code, peut fonctionner sur n'importe quelle plate-forme et sous n'importe quel système d'exploitation possédant une machine Java virtuelle (Figure 5) [1]. Fig. 5 : Le pseudo-code de Java. • Définition de Pseudo-code: Le pseudo-code est similaire au code machine produit par d'autres langages, mais il n'est pas propre à un processeur donné. Il ajoute un niveau entre la source et le code machine. • Le Pseudo-machine : C’est un compromis qui assure la portabilité d'un langage. Lorsque le processeur P n'est pas une machine qui existe physiquement mais un logiciel simulant (ou interprétant) une machine on appelle cette machine pseudo-machine ou p-machine. Le programme source est alors traduit par le compilateur en instructions de la pseudo-machine et se dénomme
  • 15. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 13 pseudo-code. La p-machine standard qui se dénomme machine virtuelle dans le langage Java peut ainsi être implantée dans n'importe quel ordinateur physique à travers un logiciel qui simule son comportement; un tel logiciel est appelé interpréteur de la p-machine. Donc dans le cas d'une p-machine le programme source est compilé, mais le programme cible est exécuté par l'interpréteur de la p-machine. Beaucoup de langages possèdent pour une plate-forme fixée des interpréteurs ou des compilateurs, moins possèdent une p-machine, Java est l'un de ces langages[4] . 2.3.2 Bytecode et Compilation native : a. Compilation native: La compilation native consiste en la traduction de la source java en langage binaire exécutable sur la plat-forme concernée (Figure 6). Fig. 6 : Java est un compilateur neutre. b. Bytecode : La compilation en bytecode (ou pseudo-code) ce fait comme suit : le compilateur Javac traduit le programme source xxx.java en un code intermédiaire indépendant de toute machine physique et non exécutable directement, le fichier obtenu se dénomme xxx.class. Seule une p-machine (dénommée machine virtuelle java) est capable d'exécuter ce bytecode. Le bytecode est aussi dénommé instructions virtuelles java. Exemple (Figure 7). Fig. 7 : Le bytecode Java.
  • 16. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 14 2.3.3 La machine virtuelle Java (JVM) : 1. Définition : La machine virtuelle JAVA est aussi appelée interpréteur Java, elle se charge d’exécuter le programme source java traduit en bytecode (Figure 8) sur la machine physique à travers son système d'exploitation (Windows, Unix,MacOs,...). Les applications Java, ne peuvent fonctionner que sur un système sur lequel une JVM adéquate a été installée [1]. Fig. 8 : Fonctionnement de la JVM 2. Fonctionnement élémentaire de la machine virtuelle Java [4] : Une machine virtuelle Java contient 6 parties principales : 1. Un jeu d'instructions en pseudo-code. 2. Une pile d'exécution LIFO pour stocker les paramètres des méthodes et les résultats des méthodes. 3. Une file FIFO d'opérandes pour stocker les paramètres et les résultats des instructions du p-code. 4. Un segment de mémoire dans lequel s'effectuent l'allocation et la désallocation d'objets. 5. Une zone de stockage des méthodes contenant le p-code de chaque méthode et son environnement. 6. Un ensemble de registres servant à mémoriser les différents états de la machine et les informations utiles à l'exécution de l'instruction présente dans le registre instruction bytecode en cours. Comme toute machine la machine virtuelle Java est fondée sur l'architecture de Von Neumann et elle exécute les instructions séquentiellement un à une. Fig. 9 : un synoptique de la machine virtuelle Java
  • 17. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 15 Les registres sont des mémoires 32 bits : vars : pointe dans la pile vers la première variable locale de la méthode en cours d'exécution. pc : compteur ordinal indiquant l'adresse de l'instruction de p-code en cours d'exécution. optop : sommet de pile des opérandes. frame : pointe sur le code et l'environnement de la méthode qui en cours d'exécution. 2.4 Java est totalement adapté au réseau : Distribution - Socket, Servlet, RMI [1] Java possède une importante bibliothèque de routines permettant de gérer les protocoles TCP/IP tels que HTTP et FTP. Les applications Java peuvent charger et accéder à des pages Web sur Internet via des URL avec la même facilité qu'elles accèdent à un fichier local sur le système. Les fonctionnalités réseau de Java sont à la fois fiables et d'utilisation aisée. Toute personne ayant essayé de faire de la programmation pour Internet avec un autre langage se réjouira de la simplicité de Java lorsqu'il s'agit de mettre en oeuvre des tâches lourdes, comme l'ouverture d'une connexion avec un Socket. De plus, Java rend plus facile l'élaboration des scripts CGI (Common Gateway Interface), et un mécanisme élégant, nommé Servlet, augmente considérablement l'efficacité du traitement côté serveur, assuré par Java. De nombreux serveurs Web, parmi les plus courants, supportent les servlets. Le mécanisme d'invocation de méthode à distance (RMI) autorise la communication entre objets distribués. Fig. 10 : L’adaptation aux réseaux de Java
  • 18. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 16 2.5 Java est multitâche : Thread [1] Evoluer dans un environnement réseau, sur le Web par exemple, engendre souvent la nécessité d'exécuter plusieurs tâches simultanément : jouer un son, produire une animation, exécuter une requête importante sur une base de données, etc. Java est nativement doté d'un ensemble complet de primitives de gestion du multitâche - ou multithreading - simplifiant grandement l'écriture de programmes s'appuyant sur ce type de fonctionnalités. 2.6 Java permet l'exécution dynamique [1] Java permet l'exécution dynamique du code grâce à son interpréteur. L'interpréteur Java exécute le bytecode et autorise le chargement de code additionnel à la volée. Cette caractéristique pourra particulièrement être mise à contribution dans le cadre des applications Internet et Intranet. En outre, Java rend aujourd'hui possible le transport des objets entre différents programmes. Ce mécanisme puissant permet de décider de l'endroit où s'exécute le code lors du déroulement du programme et ouvre la porte à de vastes possibilités (optimisation, répartition de charge). 2.7 Composants logiciels réutilisables : Javabeans [1] Les composants d'un programme doivent pouvoir être utilisés avec plus d'un package logiciel pour avoir la possibilité de réassembler ces composants pour créer d'autres programmes avec une plus grande efficacité de développement. Cette idée consiste à ne construire qu'une seule fois des composants de petite taille, et à les réutiliser autant de fois que possible, en rationalisant ainsi l'ensemble du processus de développement. 2.8 Java assure la Sécurité : Java a été conçue pour être exploité dans des environnements serveur et distribués. Dans ce but, la sécurité n’a pas été négligée. Java permet la construction de systèmes inaltérables et sans virus. Contrairement aux ActiveX, Java dispose d'un modèle de sécurité avec une granularité élevée. Le système garantit à l'utilisateur un niveau de protection élevé pour son système. 2.9 Java est robuste : Comme Visual C++, Visual Basic et Delphi, Java est un langage robuste qui peut être exploité pour développer un large éventail de programmes utilisant une interface utilisateur graphique, pouvant être appliqués en réseau et se connecter à des bases de données, et offrant d'autres fonctionnalités toutes plus sophistiquées les unes que les autres.
  • 19. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 17 2.10 Les JSP (Java Server Pages) : Est une technologie Java qui permet la génération de pages web dynamiques comme plusieurs technologies comme PHP, ASP et ASP.NET. Chacune possèdent des avantages et des inconvénients. La technologie JSP permet de séparer la présentation sous forme de code HTML et les traitements sous formes de classes Java. C'est le mélange de la puissance de Java côté serveur et la facilité de mise en page d'HTML côté client. Les fichiers JSP possèdent par convention l'extension .jsp. Les JSP sont basées sur les servlets. Au premier appel de la page JSP. La servlet générée est compilée et sauvegardée puis elle est exécutée. Les appels suivants de JSP sont beaucoup plus rapides car la servlet, conservée par le serveur, est directement exécutée. Cette approche possède plusieurs avantages : • L'utilisation de Java par les JSP permet une indépendance de la plate−forme d'exécution mais aussi du serveur web utilisé. • La séparation des traitements et de la présentation : la page web peut être écrite par un designer et les tags Java peuvent être ajoutés ensuite par le développeur. Les traitements peuvent être réalisés par des composants réutilisables (des Java beans). • Les JSP sont basées sur les servlets : tous ce qui est fait par une servlet pour la génération de pages dynamiques peuvent être fait avec une JSP. Il est préférable d'utiliser les JSP pour générer des pages web dynamiques, l'usage des servlets est obligatoire si celles ci doivent communiquer directement avec une applet ou une application et non plus avec un serveur web. les pages JSP sont exécutées dans un serveur web (Tomcat par exemple). Exemple datedujour.jsp <%@ page import="java.util.Date"%> <html> <body> <%! Date dateDuJour; %> <% dateDuJour = new Date();%> Date du jour : <%= dateDuJour %><BR> </body> </html> Résultat http://localhost:8084/DateDuJour/ Date du jour : Fri Feb 23 20:49:38 GMT+01:00 2007
  • 20. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 18 2.11 Les servlets : Une servlet est un programme qui s'exécute côté serveur, elle reçoit une requête du client, elle effectue des traitements et renvoie le résultat. La liaison entre la servlet et le client peut être directe ou passer par un intermédiaire comme par exemple un serveur HTTP par la génération de pages html dynamiques. En général; n'importe quel protocole reposant sur le principe de requête/réponse peut faire usage d'une servlet. Pour exécuter une servlet, il suffit de saisir une URL qui désigne la servlet dans un navigateur. 1. Le serveur reçoit la requête http qui nécessite une servlet de la part du navigateur. 2. Si c'est la première sollicitation de la servlet, le serveur l'instancier. Les servlets sont stockées (sous forme de fichier .class). La servlet reste en mémoire jusqu'à l'arrêt du serveur. 3. La servlet en mémoire, peut être appelée par plusieurs threads lancés par le serveur pour chaque requête. 4. Le serveur créé un objet qui représente la requête http et objet qui contiendra la réponse et les envoie à la servlet 5. La servlet créé dynamiquement la réponse sous forme de page html transmise via un flux dans l'objet contenant la réponse. 6. Le serveur récupère l'objet réponse et envoie la page html au client. L'API servlet regroupe un ensemble de classes dans deux packages : • javax.servlet : contient les classes pour développer des servlets génériques indépendantes d'un protocole. • javax.servlet.http : contient les classes pour développer des servlets qui reposent sur le protocole http. Pour pouvoir mettre en oeuvre des servlets, il faut obligatoirement utiliser un serveur web qui propose un environnement d'exécution pour les servlets. Il en existe plusieurs commerciaux ou libres. Le plus connu et le plus utilisé est Tomcat et développée par le groupe Apache. Exemple Exemple_Servlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Exemple_Servlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter();
  • 21. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 19 out.println("<html>"); out.println("<head>"); out.println("<title>Bonjour tout le monde</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Bonjour tout le monde</h1>"); out.println("</body>"); out.println("</html>"); } } Résultat http://localhost:8084/Exemple_Servlet/ Bonjour le monde 2.12 La technologie RMI (Remote Method Invocation) : Cette technologie est développée et fournie par Sun à partir du JDK 1.1 pour permettre de mettre en oeuvre facilement des objets distribués. Le but de RMI est de permettre l'appel, l'exécution et le renvoi du résultat d'une méthode exécutée dans une machine virtuelle différente de celle de l'objet l'appelant. Cette machine virtuelle peut être sur une machine différente à condition qu'elle soit accessible par le réseau. La machine sur laquelle s'exécute la méthode distante est appelée serveur. L'appel coté client consiste à obtenir une référence sur l'objet distant puis simplement appeler la méthode à partir de cette référence. La technologie RMI se charge de rendre transparente la localisation de l'objet distant, son appel et le renvoi du résultat. Elle utilise deux classes particulières, le stub et le skeleton qui doivent être générées avec l'outil rmic fourni avec le JDK. Le stub est une classe qui se situe côté client et le skeleton est son homologue coté serveur. Ces deux classes se chargent d'assurer tous les mécanismes d'appel, de communication, d'exécution, de renvoi et de réception du résultat. Le développement coté serveur se compose de : o La définition d'une interface qui contient les méthodes qui peuvent être appelées à distance. o L'écriture d'une classe qui implémente cette interface. o L'écriture d'une classe qui instanciera l'objet et l'enregistrera en lui affectant un nom dans le registre de nom RMI (RMI Registry).
  • 22. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 20 Le développement côté client se compose de : o L'obtention d'une référence sur l'objet distant à partir de son nom. o L'appel à la méthode à partir de cette référence. o Enfin, il faut générer les classes stub et skeleton en exécutant le programme rmic avec le fichier source de l'objet distant 3. Généralité sur Java : 3.1 Les avantages de Java [1] : Le primordial avantage de ce langage de programmation réside dans le fait que la syntaxe de java est analogue à celle de C++, ce qui le rend économique et professionnel. Java est un langage "à objets", par opposition au C++ qui lui, est "orienté objet" et qui autorise la programmation procédurale. Tous les éléments de Java, à l'exception de quelques types de base tels que les nombres, sont des objets. (La conception orientée objet présentant de nombreux avantages pour les projets sophistiqués, elle a remplacé les techniques structurées antérieures).On distingue ces 4 principales avantages : 1. La mémoire dans Java est allouée et libérée automatiquement. Vous ne risquez pas de pertes de mémoire. 2. Ils ont éliminé l'arithmétique des pointeurs introduisant du même coup une vraie gestion de tableau. La notion de référence sur une zone mémoire remplace avantageusement celle de " pointeur", car elle supprime la possibilité d'écraser toute zone mémoire à cause d'un compteur erroné. 3. Ils ont éliminé toute possibilité de confusion entre une affectation et un test d'égalité dans une instruction conditionnelle. L'instruction if (n = 3) ne pourra pas franchir l'étape de la compilation. 4. Ils ont supprimé l'héritage multiple en le remplaçant par une nouvelle notion d'interface dérivée d'Objective C. Les interfaces vous offrent tout ce que vous pouvez obtenir à partir de l'héritage multiple, sans la complexité de la gestion de hiérarchie d'héritage multiple. 3.2 Comparer le langage Java: Le langage Java est en fait un compromis entre les langages de haut-niveau tel que Shells et du TCL, Les langages orientées-objet tel que Perl, les langages scripts portables, mais lents, et les langages compilés, tels que C et C++, qui sont non portables mais rapides [6].
  • 23. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 21 Voici une petite comparaison illustrant les caractéristiques du langage JAVA : caractéristique Java SmallTalk TCL Perl Shells C C++ Simple Orienté Objet Robuste Sécurisé Interprété Dynamique Portable Architecture Neutre Multithread Exceptions Performance Haute Moyenne Basse Moyenne Basse Haute Haute Ou la caractéristique est : existe existe parfois n'existe pas Après avoir lu ce tableau, on remarque que Java possède une grande palette d'attributs intéressants, pouvant être très bénéfique à une grande variété de programmeurs. Java, Perl et SmallTalk sont des environnements de programmation comparables, offrant les capacités les plus riches aux développeurs d'applications logicielles. 4. Le Java Développement Kit (JDK) : 4.1 Définition : Le JDK regroupe l'ensemble des éléments permettant le développement, la mise au point et l'exécution des programmes Java. Le JDK inclut de nombreux outils de développement ainsi que l'ensemble de l'API Java dont le développeur dispose pour construire ses programmes. Le JDK peut donc être perçu comme : 1. un ensemble d'outils ; 2. un jeu de classes et de services ; 3. un ensemble de spécifications.
  • 24. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 22 te et différentes versions sont mises à la disposition des développeurs. La dernière mouture du JDK a été renommée SDK depuis la version 1.2.2 [1].Bien qu'un d Description Le JDK est en évolution constan éveloppement Java puisse être entièrement réalisé à l'aide du JDK, les outils fournis sont de type ligne de commande - portabilité oblige. Ils n'autorisent donc pas une approche visuelle ni une automatisation du développement comme c'est le cas avec JBuilder. Le Tableau suivant recense les principaux outils livrés avec le JDK. Nom java.ex Machine virtuelle Java, permet l'exécution des programmes (redistribuable en version Ja e va 2). jre.exe Machine virtuelle Java redistribuable (Java Runtime Engine), permet l'exécution des programmes. Attention, ce programme n'existe plus en plate-forme Java 2. Il est remplacé par java.exe. javac.exe Compilateur Java. appletviewer.exe ermettant l'exécution des applets.Machine virtuelle Java p jar.exe Permet la création et la manipulation d'Archives Java (JAR). javadoc.exe Générateur de documentation Java, au format HTML. javap.exe Désassembleur de classes Java compilées. jdb.exe Débogueur Java en ligne de commande. 4.2 L ons et les te s: JDK 1.4 JDK JDK 1.5 (plate-forme Java 2) (nouvelle plate-forme Java 2, bêta) 5. L rammation en Java [6] : d'invoquer la commande javac avec le nom du fichier source avec son extension .java : javac NomFichier.java Le nom es versi chnologies du JDK : Les versions majeures du JDK sont les suivante JDK 1.0 1.1 JDK 1.2 JDK 1.6 JDK 1.3 es techniques de base de prog 5.1 La compilation d'un code source : Pour compiler un fichier source il suffit du fichier doit correspondre au nom de la classe principale en respectant la casse même si le système d'exploitation n'y est pas sensible Suite à la compilation, le pseudo code Java est enregistré sous le nom NomFichier.class
  • 25. Chapitre II : Introduction au JAVA Programmation réseau en JAVA 23 Fig. 11 : Compilation par une commande. 5.2 L'exécution d'un pro Une classe ne peut être exécutée que si elle contient une méthode main() correctement nt du byte-code il suffit d'invoquer la commande java avec le nom du Il suffit de créer une page HTML pouvant être très simple : Exemple: gramme et d'une applet : a. L'exécution d'un programme : définie. Pour exécuter un fichier contena fichier source sans son extension .class : java NomFichier b. L'exécution d'une applet : <HTML> <head>> TITLE>Test d'une Applet Java</TITLE> ad> height=200> </APPLET> < </he <BODY> <APPLET code="NomFichier.class" width=270 </BODY> </HTML> Il faut ensuite visualiser la page créée dans l'appletviewer ou dans un navigateur 32 bits compatible avec la version de Java dans laquelle l'applet est écrite.
  • 26. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 24 Le langage JAVA et la programmation réseau epuis son origine, Java fournit plusieurs classes et interfaces destinées à la programmation réseau, à cause de son API qui a été bien conçu et riche d'une côté, et traité la plupart des interfaces, protocoles et plateformes d'autres côté; la programmation des applications réseaux en JAVA est devenue un choix primordial. Plusieurs domaines d'application pouvant être programmé aisément avec JAVA: • Navigation d'un l'Internet (HTTP). • Messagerie électronique (SMTP et POP). • Conception de nouveaux protocoles. • Sécurité des communications (Cryptage des messages, authentification, …). • Mise en place des services Internet et interfaces GUI clients. • Recherche des hôtesses et adressage (DNS). • Transfert de fichiers (FTP). • Déploiement à distance des applications multiple systèmes (RMI). • … En plus de ça, JAVA est le premier langage est a fourni une bibliothèque riche et puissant et multi plateforme qui couvert divers domaines comme qui sont cités ci-dessus. Chapitre 3 D
  • 27. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 25 Le paquet java.net Les classes et interfaces utiles au développement réseau sont regroupées dans le package java.net. Les classes utilisées sont : • InetAddress, NetworkInterface : pour l'adressage IP. • Socket et ServerSocket pour les protocole TCP. • DatagramPacket, DatagramSocket, et MulticastSocket pour UDP. • URL, URLConnection, URLEncoder,… pour la couche application. 1. Les adresses Internet et JAVA Chaque machine du réseau Internet a une adresse unique, cette adresse (appelée adresse IP ) est codée sur 4 octets séparés par des points (Exemple 192.168.0.15). Le trois bits du poids fort (ici c'est 192.168.0) représente l'adresse du réseau et le dernier bit faible (ici c'est 15) représente l'adresse du machine sur ce réseau. Pour faciliter la compréhension humaine, un serveur particulier appelé DNS (Domaine Name Service) est capable d'associer un nom à une adresse IP. 1.1 La classe InetAddress La classe qui permet de manipuler les adresses Internet est InetAddress. Un objet de la classe InetAddress représente une adresse Internet, elle contient des méthodes pour lire une adresse, la comparer avec une autre ou la convertir en chaîne de caractères, elle ne possède pas de constructeur : il faut utiliser certaines méthodes statiques de la classe pour obtenir une instance de cette classe. Méthode Rôle InetAddress getByName(String) Renvoie l'adresse Internet associée au nom d'hôte passé en paramètre. InetAddress[] getAllByName(String) Renvoie un tableau des adresses Internet associées au nom d'hôte passé en paramètre. InetAddress getLocalHost() Renvoie l'adresse Internet de la machine locale. byte[] getAddress() Renvoie un tableau contenant les 4 octets de l'adresse Internet. String getHostAddress() Renvoie l'adresse Internet sous la forme d'une chaîne de caractères. String getHostName() Renvoie le nom du serveur.
  • 28. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 26 Le programme suivant fournit l'adresse locale de la machine, adresse de l'université de Laghouat et les adresses IP du serveur GOOGLE. Exemple Exemple_InetAdress.java import java.net.*; public class Exemple_InetAddress { public static void main(String[] args) { try { // Renvoi l'adresse de la machine InetAddress Adresse_Locale = InetAddress.getLocalHost(); System.out.println("L'adresse locale = " + Adresse_Locale.getHostAddress()); // Renvoi l'adresse IP du serveur de l'université de Laghouat InetAddress Adresse_Serveur = InetAddress.getByName("lagh-univ.dz"); System.out.println("L'adresse de l'université de Laghouat = " + Adresse_Serveur.getHostAddress()); // Renvoi les adresses du serveurs Google InetAddress[] Adresses_Serveurs = InetAddress.getAllByName("google.com"); System.out.println("Les adresses du Google : "); for (int i = 0; i < Adresses_Serveurs.length; i++) System.out.println(" " + Adresses_Serveurs[i].getHostAddress()); } catch (Exception e) { e.printStackTrace(); } } } Résultat L'adresse locale = 127.0.0.1 L'adresse de L'université de Laghouat = 192.18.97.71 Les adresses du Google : 207.46.249.27 207.46.134.155 207.46.249.190 207.46.134.222 207.46.134.190
  • 29. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 27 1.2 La classe NetworkInterface La nouvelle classe NetworkInterface (J2SE 1.4) permet d'obtenir la liste des interfaces de connexion au réseau de la machine. Une interface de connexion au réseau se caractérise par un nom court, une désignation et une liste d'adresses IP. Les méthodes utilisées dans cette classe sont: Méthode Description String getName() Renvoie le nom court de l'interface String getDisplayName() Renvoie la désignation de l'interface Enumeration getInetAddresses() Renvoie une énumération d'objet InetAddress contenant la liste des adresses IP associée à l'interface L'exécution de l'exemple donne toutes les interfaces liées à notre machine. Exemple Exemple_Intetfaces.java import java.io.*; import java.net.*; import java.util.*; import static java.lang.System.out; public class Exemple_Intetfaces { public static void main(String args[]) throws SocketException { Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); for (NetworkInterface netint : Collections.list(nets)) displayInterfaceInformation(netint); } static void displayInterfaceInformation(NetworkInterface netint) throws SocketException { out.printf("Nom court: %sn", netint.getDisplayName()); out.printf("Désignation: %sn", netint.getName()); Enumeration<InetAddress> inetAddresses = netint.getInetAddresses(); for (InetAddress inetAddress : Collections.list(inetAddresses)) { out.printf("Adresse IP %sn", inetAddress); } out.printf("n"); } } Résultat Nom court: MS TCP Loopback interface Désignation: lo Adresse IP /127.0.0.1 Nom court: Carte Fast Ethernet CNet PRO200 PCI - Miniport d'ordonnancement de paquets Désignation: eth0 Adresse IP /192.168.0.15
  • 30. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 28 2. La communication par des sockets et JAVA Les Sockets sont des objets permettant la gestion de deux flux de données : un flux d'entrée (InputStream), garantissant la réception des données, et un flux de sortie (OutputStream), servant à envoyer les données. En Java, nous distinguerons deux types de Socket: les Sockets simples (dits "clients") et les Sockets serveurs. Les Sockets représentent l'objet de base pour la programmation TCP et UDP. Utilisation du protocole TCP Les classes URL et URLConnection fournissent un mécanisme de haut niveau pour l'accès aux ressources à l'Internet. Mais par fois, nos programmes nécessitent une communication réseau de bas niveau, par exemple l'écriture des applications Client/Serveur. Le paquet java.net offre une communication à double sens entre deux programmes exécute dans un réseau. Les classes du Socket et ServerSocket sont utilisées pour faire la liaison entre le programme client et le programme serveur. Le schéma suivant illustre le mécanisme de communication entre le serveur et le client. Fig. 12 : Communication par TCP
  • 31. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 29 a. La classe ServerSocket La classe ServerSocket est utilisée côté serveur : elle attend simplement les appels du ou des clients. C'est un objet du type Socket qui prend en charge la transmission des données. Cette classe représente la partie serveur du Socket. Un objet de cette classe est associé à un port sur lequel il va attendre les connexions d'un client. Généralement, à l'arrivée d'une demande de connexion, un thread est lancé pour assurer le dialogue avec le client sans bloquer les connexions des autres clients. La classe SocketServer possède plusieurs constructeurs dont les principaux sont : Constructeur Rôle ServerSocket() Constructeur par défaut. ServerSocket(int) Créer une Socket sur le port fourni en paramètre. ServerSocket(int, int) Créer une Socket sur le port avec la taille maximale de la file fourni en paramètre. Tous ces constructeurs peuvent lever une exception de type IOException. La classe SocketServer possède plusieurs méthodes : Méthode Rôle Socket accept() Attendre une nouvelle connexion void close() Fermer la socket Si un client tente de communiquer avec le serveur, la méthode accept() renvoie une Socket qui encapsule la communication avec ce client. En générale, l'algorithme suivi pour établir une connexion est la suivante : o Créer une instance de la classe SocketServer en précisant le port en paramètre. o Définir une boucle sans fin contenant les actions ci-dessous : Appelle de la méthode accept() qui renvoie une Socket lors d'une nouvelle connexion. Obtenir un flux en entrée et en sortie à partir de la Socket. Ecrire les traitements à réaliser.
  • 32. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 30 Exemple Exepmple_ServeurTCP.java import java.net.*; import java.io.*; public class Exemple_ServeurTCP { final static int port = 9632; public static void main(String[] args) { try { System.out.println("Lancement du serveur"); ServerSocket socketServeur = new ServerSocket(port); while (true) { Socket socketClient = socketServeur.accept(); System.out.println("Connexion avec : " + socketClient.getInetAddress()); BufferedReader in = new BufferedReader( new InputStreamReader(socketClient.getInputStream())); PrintStream out = new PrintStream(socketClient.getOutputStream()); out.println("Veuillez saisir votre compte : "); String Compte = in.readLine(); System.out.println("Compte d'utilisaeur : " + Compte); out.println("Bienvenue " + Compte); socketClient.close(); } } catch (Exception e) { e.printStackTrace(); } } } Résultat java -jar Exemple_ServeurTCP.jar Lancement du serveur Connexion avec : /127.0.0.1 Compte d'utilisaeur : benbac L'inconvénient de ce modèle est qu'il ne peut traiter qu'une connexion en même temps. Si plusieurs demandes de connexion arrivent simultanément, une seule est acceptée, les autres sont mise en attente jusqu'au ce que le premier termine ça connexion. Pour pouvoir traiter plusieurs connexions en même temps (plusieurs clients), il faut que le serveur soit multithreadé. Exemple Exepmple_ServeurTCPThread.java import java.net.*; import java.io.*; public class Exemple_ServeurTCPThread extends Thread { final static int port = 9632; private Socket socket;
  • 33. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 31 public static void main(String[] args) { try { ServerSocket socketServeur = new ServerSocket(port); System.out.println("Lancement du serveur"); while (true) { Socket socketClient = socketServeur.accept(); Exemple_ServeurTCPThread Serveur= new Exemple_ServeurTCPThread(socketClient); Serveur.start(); } } catch (Exception e) { e.printStackTrace(); } } public Exemple_ServeurTCPThread(Socket socket) { this.socket = socket; } public void run() { try { String message = ""; System.out.println("Connexion avec le client : " + socket.getInetAddress()); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintStream out = new PrintStream(socket.getOutputStream()); message = in.readLine(); out.println("Bonjour " + message); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } Résultat java -jar Exemple_ServeurTCPThread.jar Lancement du serveur Connexion avec le client : /127.0.0.1 Compte d'utilisaeur : benbac Connexion avec le client : /127.0.0.1 Compte d'utilisaeur : mustapha Connexion avec le client : /127.0.0.1 Compte d'utilisaeur : aziz
  • 34. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 32 b. La classe Socket Les sockets implémentent le protocole TCP. La classe contient les méthodes de création des flux d'entrée et de sortie correspondants. Les sockets constituent la base des communications par le réseau. Comme les flux Java sont transformés en format TCP/IP, il est possible de communiquer avec l'ensemble des ordinateurs qui utilisent ce même protocole. La seule chose importante au niveau du système d'exploitation est qu'il soit capable de gérer ce protocole. Cette classe encapsule la connexion à une machine distante via le réseau. Cette classe gère la connexion, l'envoi de données, la réception de données et la déconnexion. La classe Socket possède plusieurs constructeurs dont les principaux sont : Constructeur Rôle Server() Constructeur par défaut ServerSocket(String, int) Créer une socket sur la machine dont le nom et le port sont fournis en paramètre. ServerSocket(InetAddress, int) Créer une socket sur la machine dont l'adresse IP et le port sont fournis en paramètre. La classe Socket possède de nombreuses méthodes : Méthode Rôle InetAddress getInetAddress() Renvoie l'adresse I.P. à laquelle la socket est connectée. void close() Fermer la socket. InputStream getInputStream() Renvoie un flux en entrée pour recevoir les données de la socket. OutputStream getOutputStream() Renvoie un flux en sortie pour émettre les données de la socket. En générale, l'algorithme suivi pour établir une connexion est la suivante : • Créer une instance de la classe Socket en précisant la machine et le port en paramètre. • Obtenir un flux en entrée et en sortie. • Ecrire les traitements à réaliser.
  • 35. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 33 Exemple Exepmple_ClientTCP.java import java.net.*; import java.io.*; public class Exemple_ClientTCP { final static int port = 9632; public static void main(String[] args) { Socket socket; try { InetAddress serveur = InetAddress.getByName(args[0]); socket = new Socket(serveur, port); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintStream out = new PrintStream(socket.getOutputStream()); Console c = System.console(); String Message = c.readLine(in.readLine()); out.println(Message); System.out.println(in.readLine()); } catch (Exception e) { e.printStackTrace(); } } } Résultat java -jar Exemple_ClientTCP.jar 127.0.0.1 Veuillez saisir votre compte : benbac Bienvenue benbac
  • 36. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 34 2.2 Utilisation du protocole UDP L'échange de données avec UDP se fait avec deux sockets, l'une sur le serveur, l'autre sur le client. Chaque socket est caractérisé par une adresse Internet et un port. Pour utiliser le protocole UDP, java défini deux classes DatagramSocket et DatagramPacket. Le schéma suivant illustre le mécanisme de communication entre le serveur et le client. Fig. 13 : Communication par UDP a. La classe DatagramSocket Cette classe crée un Socket qui utilise le protocole UDP, pour émettre ou recevoir des données. Cette classe possède plusieurs constructeurs : Constructeur Rôle DatagramSocket() Créé une socket attachée à toutes les adresses IP de la machine et un à des ports libres sur la machine. DatagramSocket(int) Créé une socket attachée à toutes les adresses IP de la machine et au port précisé en paramètre. DatagramSocket(int, InetAddress) Créé une socket attachée à adresse IP et au port précisé en paramètre.
  • 37. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 35 Tous les constructeurs peuvent lever une exception de type SocketException : en particulier, si le port précisé est déjà utilisé lors de l'instanciation de l'objet DatagramSocket, une exception de type BindException est levée. Cette exception hérite de SocketException. La classe DatagramSocket définit plusieurs méthodes : Méthode Rôle close() Fermer la Socket et ainsi libérer le port. receive(DatagramPacket) Recevoir des données. send(DatagramPacket) Envoyer des données. int getPort() Renvoie le port associé à la socket. Par défaut, un objet DatagramSocket ne possède pas de timeout lors de l'utilisation de la méthode receive(). La méthode bloque donc l'exécution jusqu'à la réception d'un paquet de données. b. La classe DatagramPacket Cette classe encapsule une adresse Internet, un port et les données qui sont échangées grâce à un objet de type DatagramSocket. Elle possède plusieurs constructeurs pour encapsuler des paquets émis ou reçus. Constructeur Rôle DatagramPacket(byte tampon[], int length) Encapsule des paquets en réception dans un tampon DatagramPacket(byte port[], int length, InetAddress adresse, int port) Encapsule des paquets en émission à destination d'une machine La classe propose des méthodes pour obtenir ou mettre à jour les informations sur le paquet encapsulé. Méthode Rôle InetAddress getAddress () Renvoie l'adresse du serveur byte[] getData() Renvoie les données contenues dans le paquet int getPort () Renvoie le port int getLength () Renvoie la taille des données contenues dans le paquet setData(byte[]) Mettre à jour les données contenues dans le paquet Le format des données échangées est un tableau d'octets, il faut donc correctement initialiser la propriété length qui représente la taille du tableau pour un paquet émis et utiliser cette propriété pour lire les données dans un paquet reçu.
  • 38. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 36 Exemple //Exepmple_ServeurUDP.java import java.io.*; import java.net.*; public class Exemple_ServeurUDP { final static int port = 9632; final static int taille = 1024; static byte buffer[] = new byte[taille]; public static void main(String argv[]) throws Exception { DatagramSocket socket = new DatagramSocket(port); System.out.println("Lancement du serveur"); while (true) { DatagramPacket paquet = new DatagramPacket(buffer, buffer.length); DatagramPacket envoi = null; socket.receive(paquet); System.out.println("n"+paquet.getAddress()); int taille = paquet.getLength(); String donnees = new String(paquet.getData(),0, taille); System.out.println("Donnees reçues = "+donnees); String message = "Bonjour "+donnees; System.out.println("Donnees envoyees = "+message); envoi = new DatagramPacket(message.getBytes(), message.length(), paquet.getAddress(), paquet.getPort()); socket.send(envoi); } } } //Exepmple_ClientUDP.java import java.io.*; import java.net.*; public class Exemple_ClientUDP { final static int port = 9632; final static int taille = 1024; static byte buffer[] = new byte[taille]; public static void main(String argv[]) throws Exception { try { InetAddress serveur = InetAddress.getByName(argv[0]); int length = argv[1].length(); byte buffer[] = argv[1].getBytes(); DatagramSocket socket = new DatagramSocket(); DatagramPacket donneesEmises = new DatagramPacket(buffer, length, serveur, port); DatagramPacket donneesRecues = new DatagramPacket(new byte[taille], taille); socket.send(donneesEmises); socket.receive(donneesRecues); System.out.println("Message : " + new String(donneesRecues.getData(),
  • 39. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 37 0, donneesRecues.getLength())); System.out.println("de : " + donneesRecues.getAddress() + ":" + donneesRecues.getPort()); } catch (Exception e) { e.printStackTrace(); } } } Résultat Sur le Serveur: /127.0.0.1 Donnees reçues = benbac Donnees envoyees = Bonjour benbac Sur le Client: java Exemple_ClientUDP 127.0.0.1 "benbac" Message : Bonjour benbac de : /127.0.0.1:9632 Voici la version multithreaté du serveur (possibilité de traiter plusieurs clients à la fois). Exemple Exemple_ServeurUDPThread.java import java.net.*; public class Exemple_ServeurUDPThread extends Thread { protected DatagramSocket socket; public static void main(String[] args) throws Exception { try { Exemple_ServeurUDPThread UDPThread = new Exemple_ServeurUDPThread(); UDPThread.start(); } catch (Exception e) { e.printStackTrace(); } } public Exemple_ServeurUDPThread() throws Exception{ socket = new DatagramSocket(9632); } public void run() { try { while (true) { System.out.println("Lancement du serveur"); byte buffer[] = new byte[256]; DatagramPacket paquet = new DatagramPacket(buffer, buffer.length); DatagramPacket envoi = null; socket.receive(paquet); System.out.println("n"+paquet.getAddress()); int taille = paquet.getLength(); String donnees = new String(paquet.getData(),0, taille); System.out.println("Donnees reçues = "+donnees);
  • 40. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 38 String message = "Bonjour "+donnees; System.out.println("Donnees envoyees = "+message); envoi = new DatagramPacket(message.getBytes(), message.length(), paquet.getAddress(), paquet.getPort()); socket.send(envoi); Thread.yield( ); } } catch (Exception e) { e.printStackTrace(); } } } c. La clase MulticastSocket En plus du DatagramSocket qui permet aux programmes d'envoyer des paquets entre eux. Le paquet java.net contient la classe MulticastSocket. Ce type de socket est utilisé au côté client pour acquérir des paquets diffusé aux clients multiples par le serveur. Les constructeurs sont les suivants : Constructeur Rôle MulticastSocket() Pour l'envoi des paquets. MulticastSocket(int port) Pour la réception des paquets sur un port spécifié. Les méthodes sont les suivantes : Méthode Rôle void joinGroup(InetAddress mcastaddr) La jointure avec à un groupe de diffusion. leaveGroup(InetAddress mcastaddr) Abandonner le groupe de diffusion. L'exemple suivant est un serveur d'horloge parlent, c'est-à-dire donne l'heure tous les secondes. Les clients reçoivent l'heure à la demande. Exemple //Exepmple_ServeurMulticast.java import java.io.*; import java.net.*; import java.util.*; public class Exepmple_ServeurMulticast { public static final int PORT = 8888; public static final String GROUP = "229.69.69.69"; public static final byte TTL = 1; public static void main(String[] args) { byte[] recBuffer = new byte[512]; try {
  • 41. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 39 MulticastSocket veille = new MulticastSocket(); InetAddress adrGroupe = InetAddress.getByName(GROUP); while (veille != null) { ByteArrayOutputStream boz = new ByteArrayOutputStream(); ObjectOutputStream oz = new ObjectOutputStream(boz); oz.writeObject(new Date()); DatagramPacket sendPack = new DatagramPacket(boz.toByteArray(), boz.size(), adrGroupe, PORT); veille.send(sendPack, TTL); try{ Thread.sleep(1000); } catch (InterruptedException e){} } } catch (Exception e) {} } } //Exepmple_ClientMulticast.java import java.io.*; import java.net.*; import java.util.*; public class Exemple_ClientMulticast { public static final int PORT = 8888; public static final String GROUP = "229.69.69.69"; public static void main(String[] args) { MulticastSocket socket = null; InetAddress adrGroupe = null; byte[] recBuffer = new byte[512]; try { socket = new MulticastSocket(PORT); adrGroupe = InetAddress.getByName(GROUP); if (socket != null) { socket.joinGroup(adrGroupe); DatagramPacket recvPack = new DatagramPacket(recBuffer, recBuffer.length); for (int i = 0; i < 100; i++) { socket.receive(recvPack); ObjectInputStream inz = new ObjectInputStream(new ByteArrayInputStream(recvPack.getData())); Object obj = inz.readObject(); System.out.println(obj); inz.close(); } } } catch (Exception e) {} finally { if (socket != null) { try { socket.leaveGroup(adrGroupe); } catch (Exception e) {} } } } }
  • 42. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 40 3. Les URLs et JAVA Java est défini tout un paquet pour la gestion et la manipulation des liens (URLs). Les classe base sont : la classe URL pour la validation syntaxique des liens, la classe URLConnection pour l'établissement d'une connexion avec une ressource et URLEncoder pour assuré le codage des URLs. a. La classe URL Un objet de cette classe encapsule une URL : la validité syntaxique de l'URL est assurée mais l'existence de la ressource n'est pas assurée. L'identification de la ressource indique le chemin d'accès de celle ci sur le serveur. Le constructeur de la classe lève une exception du type MalformedURLException si la syntaxe de l'URL n'est pas correcte. Les objets créés sont constants et ne peuvent plus être modifiés par la suite. Le fragment du code suivant levé une exception si la syntaxe de l'url fournit est erronée. Exemple import java.net.*; public class Exemple_URL { public static void main(String[] args) { URL pageURL = null; try { pageURL = new URL("http:/javasun.com"); } catch (MalformedURLException e) { e.printStackTrace(); } } } La classe URL possède plusieurs méthodes pour obtenir les différents éléments qui composent l'URL, parmi ces méthodes : getProtocol(), getHost(), getPort(), getFile(). La méthode openStream() ouvre un flux de données en entrée pour lire la ressource et renvoie un objet de type InputStream. La méthode openConnection ouvre une connexion vers la ressource et renvoie un objet de type URLConnexion.
  • 43. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 41 b. La classe URLConnection Cette classe établir une connexion vers une ressource désignée par une URL pour obtenir un flux de données ou des informations sur cette ressource. L'exemple suivant récupère un fichier texte du serveur locale et le afficher. Le fichier test.txt doit être accessible via le serveur web dans le répertoire "fichiers". Exemple import java.net.*; import java.io.*; public class Exemple_URLConnection { public static void main(String[] args) { try { URL monURL = new URL("http://localhost/fichiers/teste.txt"); // Ouvrir la connexion et le flux de données URLConnection connexion = monURL.openConnection(); InputStream flux = connexion.getInputStream(); // Renvoi la taille int taille = connexion.getContentLength(); // Affichage du texte for(;taille != 0; taille --) System.out.print((char)flux.read()); flux.close(); } catch (Exception e) { e.printStackTrace(); } } } c. La classe URLEncoder Cette classe est une classe utilitaire qui propose la méthode statique encode() pour encoder une URL. Elle remplace notamment les espaces par un signe "+" et les caractères spéciaux par un signe "%" suivi du code du caractère. Exemple import java.net.*; public class Exemple_URLEncoder { public static void main(String[] args) { String url = "http://www.test.fr/images perso/mon image.gif"; System.out.println(URLEncoder.encode(url)); } }
  • 44. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 42 Résultat http%3A%2F%2Fwww.test.fr%2Fimages+perso%2Fmon+image.gif Dans l'exemple suivant en essaye de récupérer le logo de l'université de Laghouat. Exemple // Exemple_URLImage.java import java.applet.Applet ; import java.net.URL ; import java.net.MalformedURLException ; import java.awt.Graphics ; import java.awt.Image ; import java.awt.event.* ; import java.awt.* ; public class Exemple_URLImage extends Applet implements ActionListener { private Image image = null ; private Button ok ; public void init() { setLayout(new BorderLayout()); add(ok = new Button("Téléchargement"), BorderLayout.SOUTH); ok.addActionListener(this) ; } public void paint(Graphics g) { if ( image != null ) g.drawImage(image,0,0,this) ; } public void actionPerformed(ActionEvent e) { try { URL url = new URL("http://www.lagh-univ.dz/images/logo.jpg") ; image = getImage(url) ; repaint() ; } catch (MalformedURLException mue) { } } } // Exemple_URLImage.html <HTML> <HEAD> <TITLE>Téléchargement d'une image</TITLE> </HEAD> <BODY> <H3>Télécharger le logo de l'université de Laghouat</H3> <HR> <DIV ALIGN=center> <APPLET CODE="Exemple_URLImage.class" WIDTH="210" HEIGHT="210"></APPLET> </DIV> <HR> </BODY> </HTML>
  • 45. Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA 43 Résultat //appletviewer Exemple_URLImage.html Fig. 14 : Visualisation d'un applet dans l'AppletViewer. //Exemple_URLImage.html Fig. 15 : Visualisation d'une page html dans le navigateur. 4. Les exceptions liées au réseau Le package java.net définit plusieurs exceptions qui permettant de gérer les différentes erreurs résultantes de l'exécution des ces classes et méthodes. Les exceptions sont héritées de SocketException et IOException, Parmi ces exceptions : Exception Description BindException Connexion au port local impossible : le port est peut être déjà utilisé par une autre application. ConnectException Connexion à une socket impossible : aucun serveur n'écoute sur le port précisé. MalformedURLException L'URL n'est pas valide NoRouteToHostException Connexion à l'hôte impossible : un firewall empêche la connexion SocketTimeoutException Délai d'attente pour le réception ou l'émission des données écoulé UnknownHostException L'adresse IP de l'hôte n'a pas pu être trouvée
  • 46. Conclusion Programmation réseau en JAVA 44 Conclusion près avoir quelques notions de base sur les réseaux dans le premier chapitre, et de mettre l’accent sur le langage JAVA dans le deuxième chapitre et traité la programmation réseau en JAVA dans le dernier chapitre en voie claire et nette la puissance et la souplesse de ce langage dans divers domaines d’application et spécialement dans l’Internet et les réseaux interconnectées. Mais malheureusement, à cause de l’absence d’une salle de TP et d’une connexion Internet, nous n’avait pas l’occasion de développer une application en JAVA de messagerie qui turne sur un réseau local. Tous les exemples d’écrit dans ce rapport ont été testés dans une machine locale. JAVA est actuellement prend l'avantage complet de l'Internet en dominant ces principales aspects : • Rechercher et visualisation des informations. • Transmission des données. • Jeux interactifs. • Chat et messagerie. • Commerce électronique. • Actualités. • Diffusion radio et TV. • Conférence en ligne. • … En future, il semble que JAVA devient la plateforme la plus adéquate de tous type d'applications réseau et spécialement l'Internet. A
  • 47. Bibliographie Programmation réseau en JAVA 45 Bibliographie [01] Emmanuel Remy : Généralités sur java, http://emmanuel-remy.developpez.com. [02] Dr. Irène Charon: Le langage Java concepts et pratique, 2éme édition 2003. [03] Dr.Bruce Eckel: Penser en Java, 2éme édition 2000. [04] Package pédagogique multimédia, 8éme édition, Août 2006. [05] Jean Michel DOUDOUX : Développons en Java, http://www.jmdoudoux.fr/java/. [06] CISCO Academy American Network. [07] Elliotte Rusty Harold : Java Network Programming, 2nd Edition, O'Reilly. [08] The Java Tutorials, : Custom Networking http://java.sun.com/docs/books/tutorial. [09] Gilles ROUSSEL : Programmation réseau avec JAVA. [10] Comment ça marche, http://commentcamarche.net. [11] Didier Donsez, Programmation Réseau, Université de Valenciennes. [12] Boukhalkhal Ahmed et Sahel Naima, Réalisation d’une application d’aide à l’administration sous Windows NT.
  • 48. Glossaire Programmation réseau en JAVA 47 Glossaire API (Application Programming Interface) Interface de programmation d'applications, contenant un ensemble de fonctions courantes de bas niveau, bien documentées, permettant de programmer des applications. Applet Petit morceau de programme Java ayant des possibilités d'entrées-sorties aussi limitées que possibles, et conçu généralement pour être exécuté au sein d'une page web. Bytecode Sorte de code objet, intermédiaire entre le source et le binaire exécutable, utilisé en Java pour permettre un usage multi-plateforme de ce langage. Le code n'est donc pas directement compréhensible par le processeur, ce qui peut provoquer certaines lenteurs. Le bytecode est exécuté dans une VM (virtual machine). Classe Description abstraite des données et du comportement d'objets, ces objets étant similaires. Les représentants de la classe sont appelés des instances. Frame Une image, dans une animation. FTP (File Transfer Protocol) Protocole de transfert de fichier. Par extension, nom de l'utilitaire d'Unix utilisant le protocole TCP/IP pour l’émission et la réception des fichiers avec un serveur de fichiers. HTTP (HyperText Transfer Protocol) Protocole de transmission dédié aux clients et aux serveurs du web. Interpréteur Langage qui traite les lignes du code source du programme les unes après les autres, au fur et à mesure qu'il les parcourt. Par opposition à compilateur.
  • 49. Glossaire Programmation réseau en JAVA 48 Java Langage de programmation issu d'Oak et créé par Sun. Il est orienté réseau et objet, et sa syntaxe est dérivée de celle du C. Javabean Les grains de café en provenance de Java plaisaient beaucoup aux développeurs du langage. Les beans (ou Javabeans) sont des composants logiciels écrits en Java. JVM (Java Virtual Machine) Interpréteur du code Java qui permet l'exécution du programme, sur une machine en particulier. Machine virtuelle Machine abstraite simulée au sein d'une autre machine bien réelle celle-là, et utilisée comme environnement d'exécution d'un langage portable de haut niveau. Multithread Capacité à effectuer plusieurs tâches dans une seule application. Navigateur Type de logiciel utilisé pour naviguer sur les réseaux informatiques et dans leurs bases de données, en particulier sur l'Internet et le web. En anglais, browser. Oak Langage de programmation créé par Sun en 1990 par une équipe baptisée « code Green ». Il a avait être modifié et adapté, puis rebaptisé Java avec le succès qu'on lui connaît. Objet Un objet est donc un fourre-tout, qui peut être tout et n'importe quoi. Exemple de « définition fondamentale » : « un objet possède un comportement et un état qui ne peut être modifié que par les actions du comportement ». Pseudo-code Code intermédiaire entre le langage naturel et un langage informatique. Abrégé en P-code. On utilise le même terme pour désigner le code intermédiaire entre un langage informatique et un langage machine directement exécutable. RMI (Remote Method Invocation)
  • 50. Glossaire Programmation réseau en JAVA 49 Invocation (ou plus simplement appel) de méthode distante, mécanisme permettant d'utiliser sous Java des objets distribués. SDK ou JDK (Standard ou JAVA Development Kit) C'est le kit destiné au programmeur. Ce kit est composé d'un JRE, d'un compilateur et de nombreux programmes utiles, des exemples de programmes Java, les sources de toutes les classes de l'api. Servlet Applet destinée à être exécutée sur le serveur et non pas chez le client. Socket Norme (qui s'est imposée de fait) de mode de communication sur réseau, mis au point à Berkeley, qui permet à une application de dialoguer avec un protocole. Sun Microsystems, Inc. Stanford University Network Workstation, puis ensuite (et maintenant) Sun Microsystems Computers Corp. Entreprise et fabricant des station de travail, une référence en matière de calcul mathématique et de réseau de micros. Ils sont à l'origine des processeurs SPARC, de NFS qui est devenu un standard de fait, de Solaris, en plus, Sun est le fondateur de JAVA. TCP/IP (Transmission Control Protocol) Les deux protocoles de communication qui forment les fondements de l'Internet TCL (Tool Command Language) C'est un langage de commande utilisé (par exemple) pour écrire des scripts CGI, sorte de LISP (vu de loin) orienté sur le traitement de chaînes, autorisant les expressions algébriques et ayant une syntaxe assez simple. Web Méthode d'exploitation de l'Internet, par l'usage de l'hypertexte, et mis au point par un chercheur du CERN, Tim Berner-Lee. World Wide Web (www) La toile d'araignée mondiale des sites utilisant le protocole HTTP.