Académique Documents
Professionnel Documents
Culture Documents
SOMMAIRE
1 Communication réseau .................................................................................................. 2
1.1. Adresses Internet .................................................................................................... 2
1.2. Java et protocole UDP ............................................................................................ 3
1.2.1 La classe DatagramPacket ................................................................................ 3
1.2.2 La classe DatagramSocket................................................................................ 4
1.3. Java et protocole TCP ............................................................................................. 6
1.3.1 La classe Socket ............................................................................................... 6
1.3.2 La classe ServerSocket ..................................................................................... 9
1.4. Les classes URL et URLConnection .................................................................... 10
1.4.1 La classe URL ................................................................................................ 10
1.4.2 La classe URLConnection .............................................................................. 11
1.5. Remote Method Invocation (RMI) ....................................................................... 12
1.5.1 Définition d’interface ..................................................................................... 13
1.5.2 Implémentation de l’interface par une classe ................................................. 13
1.5.3 Lancer l’application Serveur ........................................................................... 14
1.5.4 Création et lancement de l’application Cliente ............................................... 15
1.6. Exercices ............................................................................................................... 16
LANGAGE JAVA
1 Communication réseau
Exemple :
Elle permet de créer des objets qui contiendront les données envoyées ou reçues
ainsi que l’adresse de destination ou de provenance du datagramme.
Deux constructeurs existent, un pour les paquets à recevoir, l’autre pour les
paquets à envoyer.
Avant toute communication en mode UDP, il est nécessaire de créer une socket
aussi bien du coté client que du coté serveur. On utilise pour cela la classe
DatagramSocket qui propose trois constructeurs :
• public void close() : ferme la socket et libère les ressources qui lui sont
associées. La socket ne pourra plus être utilisée ni pour envoyer, ni pour
recevoir des datagrammes.
• public int getLocalPort () : retourne le port d'attachement de la socket.
• public synchronized int getSoTimeout() throws SocketException:
retourne la valeur courante du timeout associé à la socket.
Exemple :
import java.io.*;
import java.net.*;
class ServeurEcho
{ final static int port =
8532; final static int taille =
1024;
final static byte buffer[] = new byte[taille];
import java.io.*;
import java.net.*;
socket.send(dataSent);
L'API utilisée pour accéder au protocole TCP se décompose en deux classes, une
utilisée par les clients et l'autre par les serveurs.
La création d'un objet Socket entraîne la création d'un point de connexion (la
socket) et la connexion vers une autre socket (le serveur). L'adresse du serveur est
composée de l'adresse d'une machine (sous forme d'un nom ou d'un objet de la
classe InetAddress) et d'un numéro de port.
L'adresse locale et le port local peuvent également être spécifiés. Par défaut,
l'appel au constructeur est bloquant tant que la connexion TCP n'est pas établie.
Une fois la connexion établie, il est possible de récupérer le flux d'entrée et le flux
de sortie de la connexion TCP vers le serveur au moyen des méthodes :
Il est alors possible d'échanger des données avec le serveur au moyen de toutes les
primitives de lecture et d'écriture des différentes classes du package java.io.
Par défaut les primitives de lecture, tel que read(), sont bloquantes tant que rien
n'est lisible sur le flux. La primitive suivante permet de définir un temps maximal
d'attente :
Une fois la connexion terminée il est très important de fermer le flux d'entrée et le
flux de sortie, mais aussi la socket au moyen de la méthode :
Par défaut cette primitive n'est pas bloquante mais la socket reste ouverte tant qu'il
reste des paquets à envoyer (en particulier le datagramme FIN). La primitive
suivante permet de définir un temps maximum d'attente avant de vraiment fermer
la socket.
package test;
import java.io.*;
import java.net.*;
Cette classe est utilisée (comme son nom l'indique) pour créer une socket du coté
serveur.
Une fois la socket créée, on attend les connexions de clients avec la méthode
bloquante :
Il est possible de spécifier un temps maximal d'attente. Pour cela il faut appeler la
méthode suivante avant l'appel à accept() :
La méthode accept() retourne un nouvel objet de la classe Socket qui est connecté
avec un client particulier, celui qui a demandé la connexion. Il est alors possible
de récupérer le flot d’entrée et de sortie comme pour la socket du client.
Exemple :
}
D'autres méthodes de manipulation sont également disponibles :
Une façon simple de l’utiliser est de créer un objet URL au moyen du constructeur
avec l’URL en paramètre, sous forme d’une chaîne de caractères de la forme :
http://..., puis d’utiliser la méthode openStream() pour obtenir un objet de type
InputStream qui permet de lire le contenu de cette url.
Exemple :
URLConnection est une classe abstraite qui propose une interface simple pour
manipuler les entêtes et le contenu d'une URL, d'une façon indépendante du
protocole. Un objet de cette classe est construit par l'appel à la méthode
openConnection() sur un objet de la classe URL.
Il est alors possible de récupérer chacune des entêtes par une des méthodes
suivantes :
Les méthodes suivantes sont des raccourcis pour les entêtes les plus courantes :
D'autres inter-action de plus bas niveau sont également possible en récupérant les
flux d'entrée et de sortie sur la connexion.
Cette technologie permet de manipuler des objets sur des machines distantes
(objets distants) de la même que des objets sur la machine locale. Cette méthode
se met en œuvre à travers les étapes suivantes :
- Définir des interfaces pour les objets distants
La définition d’interface pour les objets distants nécessite le respect des directives
suivantes :
- L’interface doit être publique
- Elle doit hériter de java.rmi.Remote
- Chaque méthode doit déclarer java.rmi.RemoteException dans sa
clause throws en plus des autres exceptions spécifiques à l’application Par
exemple :
import java.rmi.* ;
public interface Calculer extends Remote{ public int
pgcd(int a, int b)throws RemoteException ; public int
fibo(int n)throws RemoteException;
}
On définir d’abord une application serveur, si cela n’a pas été fait dans le
paragraphe précédent. Cette application serveur doit enregistrer une instance de
la classe implémentant notre interface par Naming.rebind ("nom_acces_objet",
instance_classe) ; Dans notre cas on a ceci : import java.rmi.*; import
java.rmi.server.*;
import java.net.*;
N.B. : les chemins d’accès aux classes à charger doivent être définis dans la
variable d’environnement CLASSPATH
On crée une application cliente qui fera appel aux méthodes de notre objet ; de ce
fait, elle contiendra une référence à notre objet de la manière suivante:
(interface_objet) Naming.lookup (url) ;
l’URL est définie par : "rmi://serveur/nom_acces_objet"
Pour le lancement de l’application, le fichier class de l’interface doit être
disponible (dans le même répertoire que la classe de l’application cliente). Dans
notre exemple, le client peut être ceci : import java.rmi.*;
System.out.println("Entrer 1 entier");
int b=Lire.i();
try{
System.out.println("leur pgcd est: "+cal.pgcd(a,b));
} catch(Exception e){System.out.println("erreur de calcul");}
}
}
1.6. Exercices