50
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

Programmation réseau en JAVA

Embed Size (px)

Citation preview

Page 1: Programmation réseau en JAVA

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

Page 2: Programmation réseau en JAVA

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

Page 3: Programmation réseau en JAVA

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 TCP\IP 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

Page 4: Programmation réseau en JAVA

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

Page 5: Programmation réseau en JAVA

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 U1. 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

Page 6: Programmation réseau en JAVA

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 TCP\IP

4

Page 7: Programmation réseau en JAVA

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

Page 8: Programmation réseau en JAVA

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

Page 9: Programmation réseau en JAVA

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

Page 10: Programmation réseau en JAVA

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:[email protected]/siteperso

• Dans le cas d'un e-mail, l'URL est de la forme

mailto:<email>

Exemple mailto:[email protected]

• 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

Page 11: Programmation réseau en JAVA

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

Page 12: Programmation réseau en JAVA

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

Page 13: Programmation réseau en JAVA

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

Page 14: Programmation réseau en JAVA

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

Page 15: Programmation réseau en JAVA

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.

Page 16: Programmation réseau en 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

Page 17: Programmation réseau en 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

Page 18: Programmation réseau en 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.

Page 19: Programmation réseau en JAVA

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

Page 20: Programmation réseau en JAVA

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();

Page 21: Programmation réseau en JAVA

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).

Page 22: Programmation réseau en JAVA

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].

Page 23: Programmation réseau en JAVA

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.

Page 24: Programmation réseau en JAVA

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 Jae 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

Page 25: Programmation réseau en JAVA

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.

Page 26: Programmation réseau en JAVA

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

Page 27: Programmation réseau en JAVA

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.

Page 28: Programmation réseau en JAVA

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.javaimport 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

Page 29: Programmation réseau en JAVA

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: %s\n", netint.getDisplayName()); out.printf("Désignation: %s\n", netint.getName()); Enumeration<InetAddress> inetAddresses = netint.getInetAddresses(); for (InetAddress inetAddress : Collections.list(inetAddresses)) { out.printf("Adresse IP %s\n", 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

Page 30: Programmation réseau en JAVA

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

Page 31: Programmation réseau en JAVA

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.

Page 32: Programmation réseau en JAVA

Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA

30

Exemple Exepmple_ServeurTCP.javaimport 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.javaimport java.net.*; import java.io.*; public class Exemple_ServeurTCPThread extends Thread { final static int port = 9632; private Socket socket;

Page 33: Programmation réseau en JAVA

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

Page 34: Programmation réseau en JAVA

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.

Page 35: Programmation réseau en JAVA

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

Page 36: Programmation réseau en JAVA

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.

Page 37: Programmation réseau en JAVA

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.

Page 38: Programmation réseau en JAVA

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(),

Page 39: Programmation réseau en JAVA

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.javaimport 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);

Page 40: Programmation réseau en JAVA

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 {

Page 41: Programmation réseau en JAVA

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) {} } } } }

Page 42: Programmation réseau en JAVA

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.

Page 43: Programmation réseau en JAVA

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)); } }

Page 44: Programmation réseau en JAVA

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>

Page 45: Programmation réseau en JAVA

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

Page 46: Programmation réseau en JAVA

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

Page 47: Programmation réseau en JAVA

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.

Page 48: Programmation réseau en JAVA

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.

Page 49: Programmation réseau en JAVA

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)

Page 50: Programmation réseau en JAVA

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.