REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE
MINISTERE D’ENSEIGNEMENT SUPERIEUR
ET DE LA RECHERCHE SCIENTIFIQUE
Faculté...
Sommaire Programmation réseau en JAVA
Sommaire
Sommaire général :
Introduction 02
I - Réseaux : Notions de bases 03
1. L'a...
Sommaire Programmation réseau en JAVA
III - JAVA et la programmation réseau 24
Le paquet java.net 25
1. Les adresses Inter...
Introduction Programmation réseau en JAVA
2
Introduction
es réseaux informatiques représentent le noyau qui garantie le bo...
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Chapitre
1
Réseaux : Notions de bases
n réseau informa...
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Dans les applications Client/Serveur; la liaison se fa...
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Lorsque vous écrivez un programme qui tourne sur un ré...
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Une différence importante au niveau de l'utilisation d...
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
Fig. 3 : Communication par Sockets
9. La diffusion
Le ...
Chapitre I : Réseaux : Notions de base Programmation réseau en JAVA
10. L'accès aux ressources via une URL
Une URL (Unifor...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
9
Introduction au JAVA
ans ce chapitre on va mètre l’accen...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
10
Bien que Java ait été conçu initialement comme un outil...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
11
compliquées, mal comprises, rarement utilisées de C++, ...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
12
2.3 Un langage indépendant de toute plate-forme : Appli...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
13
pseudo-code. La p-machine standard qui se dénomme machi...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
14
2.3.3 La machine virtuelle Java (JVM) :
1. Définition :...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
15
Les registres sont des mémoires 32 bits :
vars : pointe...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
16
2.5 Java est multitâche : Thread [1]
Evoluer dans un en...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
17
2.10 Les JSP (Java Server Pages) :
Est une technologie ...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
18
2.11 Les servlets :
Une servlet est un programme qui s'...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
19
out.println("<html>");
out.println("<head>");
out.print...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
20
Le développement côté client se compose de :
o L'obtent...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
21
Voici une petite comparaison illustrant les caractérist...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
22
te et différentes versions sont mises à la disposition ...
Chapitre II : Introduction au JAVA Programmation réseau en JAVA
23
Fig. 11 : Compilation par une commande.
5.2 L'exécution...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
24
Le langage JAVA et la
programmation réseau
...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
25
Le paquet java.net
Les classes et interface...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
26
Le programme suivant fournit l'adresse loca...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
27
1.2 La classe NetworkInterface
La nouvelle ...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
28
2. La communication par des sockets et JAVA...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
29
a. La classe ServerSocket
La classe ServerS...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
30
Exemple Exepmple_ServeurTCP.java
import jav...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
31
public static void main(String[] args) {
tr...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
32
b. La classe Socket
Les sockets implémenten...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
33
Exemple Exepmple_ClientTCP.java
import java...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
34
2.2 Utilisation du protocole UDP
L'échange ...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
35
Tous les constructeurs peuvent lever une ex...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
36
Exemple
//Exepmple_ServeurUDP.java
import j...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
37
0, donneesRecues.getLength()));
System.out....
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
38
String message = "Bonjour "+donnees;
System...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
39
MulticastSocket veille = new MulticastSocke...
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...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
41
b. La classe URLConnection
Cette classe éta...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
42
Résultat
http%3A%2F%2Fwww.test.fr%2Fimages+...
Chapitre III : JAVA et la programmation réseau Programmation réseau en JAVA
43
Résultat
//appletviewer
Exemple_URLImage.ht...
Conclusion Programmation réseau en JAVA
44
Conclusion
près avoir quelques notions de base sur les réseaux dans le premier ...
Bibliographie Programmation réseau en JAVA
45
Bibliographie
[01] Emmanuel Remy : Généralités sur java, http://emmanuel-rem...
Glossaire Programmation réseau en JAVA
47
Glossaire
API (Application Programming Interface)
Interface de programmation d'a...
Glossaire Programmation réseau en JAVA
48
Java
Langage de programmation issu d'Oak et créé par Sun. Il est orienté réseau ...
Glossaire Programmation réseau en JAVA
49
Invocation (ou plus simplement appel) de méthode distante, mécanisme permettant ...
Prochain SlideShare
Chargement dans…5
×

Programmation réseau en JAVA

538 vues

Publié le

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

Publié dans : Formation
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
538
Sur SlideShare
0
Issues des intégrations
0
Intégrations
6
Actions
Partages
0
Téléchargements
29
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Programmation réseau en JAVA

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

×