Programmation réseau

Transcription

Programmation réseau
Programmation réseau
Benoit Tremblais
[email protected]
IUT de Poitiers - département R&T
Programmation réseau – p. 1
Introduction
Programmation réseau – p. 2
Quelques notions à connaître
•
Une connexion TCP/IP est caractérisée par :
◦
◦
•
Introduction
une adresse IP
un numéro de port : désigne une application
* ports réservés [0-1023] (21 : FTP, 80 : HTTP, 25 : SMTP...)
* ports temporaires [1024-5000] attribués automatiquement par l’OS
* ports libres [5000-65635]
Il existe deux modes de communications IP :
◦
le mode connecté : TCP qui utilise les sockets
* une session par utilisateur entre la connexion et la deconnexion
* communications full duplex par flux d’octets
* quelques protocoles : HTTP, FTP, SMTP, POP...
◦
le mode non connecté : UDP qui utilise les datagrammes
* l’ordre des datagrammes n’est pas assuré
* applications : ping, DNS, jeux réseau, streaming audio-vidéo...
Classes
Sockets
Thread
UDP
Applets
Références
Programmation réseau – p. 3
Classes du paquetage java.net
Objet
Classes principales :
Authenticator
ContentHandler
DatagramPacket
DatagramSocket
MulticastSocket
DatagramSocketImpl
InetAddress
Inet4Address
NetWorkInterface
Inet6Address
PasswordAuthentification
ServerSocket
SSLServerSocket
Socket
SSLSocket
SocketAddress
InetAddress
adresse IP
Socket
Socket client
SSLSocket
socket client SSL
ServerSocket
socket serveur
SSLServerSocket
socket serveur sécurisé
URI
Uniform Resource Identifier
URL
Uniform Resource Locator
URLConnection
connexion sur les ressources
accessibles
InetSocketAddress
URLDecoder, URLEncoder
encodage/décodage des URL
HttpURLConnection
DatagramSocket
envoie/réception de paquets
jarURLConnection
DatagramPacket
paquets
MulticastSocket
socket multicast
URI
URL
URLConnection
URLDecoder
URLEncoder
URLStreamHandler
Introduction
Classes
Sockets
Thread
UDP
Applets
Références
Programmation réseau – p. 4
java.net
Introduction
•
La librairie java.net prend en charge tous les détails techniques d’une connexion
réseau
•
L’émission et la réception des données fonctionne quasiment de la même façon que la
lecture/écriture des données.
Classes
Sockets
Thread
UDP
Applets
Références
Programmation réseau – p. 5
Le paquetage java.io
•
•
Ce paquetage contient l’ensemble des classes destinées aux entrées/sorties
Il permet notament de gérer la lecture/écriture :
◦
◦
◦
◦
de flots d’octets
de flots de caractères
de fichiers
d’objets (sérialisation)
Destination
Ecriture
Flot de données
écran
fichier
mémoire...
Source
Lecture
Introduction
Flot de données
Classes
mémoire
clavier
fichier...
Sockets
Étapes :
1. Création d’un flot (Stream) d’octets, de caractères...
2. Lecture ou écriture du flot : read ou write du flot
3. Fermeture du flot
Thread
UDP
Applets
Références
Programmation réseau – p. 6
Entrées en mode binaire :
InputStream
Méthode
Description
int read() throws IOException
lit un octet sur le flux
int read(byte[] tab) throws IOException
lit les octets sur le flux
retourne le nombre d’octets lus
int read(byte[] tab, int offset,int size)
lit size octets à la position offset
throws IOException
Introduction
long skip(long nbOctets) throws IOException
saute des octets
void mark(int limite)
marque le flux
boolean markSupported()
vérifie si le marquage est supporté
void reset() throws IOException
revient à la position déterminée par mark
int available() throws IOException
octets disponibles dans le flux
void close() throws IOException
ferme le flux
Classes
Sockets
Thread
UDP
Applets
Références
Programmation réseau – p. 7
Sorties en mode binaire :
OutputStream
Méthode
Description
void write(int octet) throws IOException
écrit un octet dans le flux
void write(byte[] tab) throws IOException
écrit des octets
void write(byte[] tab, int offset,int size)
écrit size octets à la position offset
throws IOException
Introduction
void flush() throws IOException
vide le tampon
void close() throws IOException
ferme le flux
Classes
Sockets
Thread
UDP
Applets
Références
Programmation réseau – p. 8
Entrées en mode texte :
Reader
Méthode
Description
int read() throws IOException
lit un caractère
int read(char[] tab) throws IOException
lit un flux de caractères
int read(char[] tab, int offset,int size)
lit size caractères à la position offset
throws IOException
Introduction
long skip(long nbOctets) throws IOException
saute des caractères
void mark(int limite)
marque un position
boolean markSupported()
vérifie que le flux est marquable
void reset() throws IOException
revient à la position définie par mark
boolean ready() throws IOException
true si octets présents dans le flux
void close() throws IOException
ferme le flux
Classes
Sockets
Thread
UDP
Applets
Références
Programmation réseau – p. 9
Sorties en mode texte :
Writer
Méthode
Description
void write(int car) throws IOException
écrit un caractère
void write(char[] tab) throws IOException
écrit un tableau de caractères
void write(char[] tab, int offset,int size)
écrit size caractères à la position offset
throws IOException
void write(String s)throws IOException
écrit une chaîne de caractère
void write(String s, int offset,int size)
écrit une chaîne de caractère
throws IOException
Introduction
void flush() throws IOException
vide le tampon
void close() throws IOException
ferme le flux
Classes
Sockets
Thread
UDP
réseau – p. 10
AppletsProgrammationRéférences
Saisie au clavier
import java . io . ∗ ;
public class TestSaisieClavier {
public static void main ( String args [ ] ) {
InputStreamReader in_str_read = new InputStreamReader ( System . in ) ;
BufferedReader buff_read = new BufferedReader ( in_str_read ) ;
System . out . print ( "Tapez un nombre: " ) ;
String s = buff_read . readLine ( ) ;
System . out . println ( "vous avez tape"+s ) ;
}
}
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 11
AppletsProgrammationRéférences
Fichier binaire
import java . io . ∗ ;
public class TestIO {
public static void main ( String args [ ] ) {
File inputFile = new File ( "a_lire.txt" ) ;
File outputFile = new File ( "a_ecrire.txt" ) ;
FileInputStream in = new FileInputStream ( inputFile ) ;
FileOutputStream out = new FileOutputStream ( outputFile ) ;
int c ;
while ( ( c = in . read ( ) ) ! = −1) out . write ( c ) ;
in . close ( ) ;
out . close ( ) ; }
}
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 12
AppletsProgrammationRéférences
Fichier texte
import java . io . ∗ ;
public class TestIO {
static void main ( String args [ ] ) {
File inputFile = new File ( "a_lire.txt" ) ;
FileReader fr = new FileReader ( inputFile ) ;
BufferedReader br = new BufferedReader ( fr ) ;
String ligne = null ;
while ( ( ligne = br . readLine ( ) ) ! = null )
System . out . println ( ligne ) ;
br . close ( ) ; }
}
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 13
AppletsProgrammationRéférences
La classe InetAddress
Cette classe permet de représenter une adresse internet par deux champs :
•
•
une chaîne de caractère (String) correspondant au nom d’hôte
un entier de 32 bits correspondant à l’adresse IP
Méthode
Description
static InetAddress getLocalHost()
adresse de l’hôte local
throws UnknownHostException
static InetAddress getByName(String host)
adresse par le nom d’hôte
throws UnknownHostException
static InetAddress[] getAllByName(String host)
les différentes adresse d’un site
throws UnknownHostException
Introduction
String getHostName()
retourne le nom de l’hôte
String getHostAddress()
%d.%d.%d.%d
byte[] getAddress()
IP sous la forme d’un tableau d’octets
Classes
Sockets
Thread
UDP
réseau – p. 14
AppletsProgrammationRéférences
La classe InetAddress
InetAddress localhost = InetAddress . getLocalHost ( ) ;
System . out . println ( localhost ) ;
InetAddress adresse =
InetAddress . getByName ( "http://www.univ-poitiers.fr" ) ;
System . out . println ( adresse ) ;
System . out . println ( "Hote = "+adresse . getHostName ( ) ) ;
System . out . println ( "Adresse de l’hote = "+adresse . getHostAddress ( ) ) ;
InetAddress adresse2 = InetAddress . getByName ( "195.167.48.12" ) ;
System . out . println ( adresse2 ) ;
InetAddress [ ] adresses =
InetAddress . getAllByName ( "www.microsoft.com" ) ;
System . out . println ( adresses ) ;
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 15
AppletsProgrammationRéférences
URL
Programmation réseau – p. 16
Les classes relatives aux URLs
Introduction
Méthode
Description
URL(String url)
constructeur
URL(URL urlAbsolue, String urlRelative)
constructeur
URLConnection openConnection()
renvoie une connexion sur l’URL
InputStream openStream()
permet de lire le contenu de l’URL
String getAuthority()
authorité
int getDefaultPort()
port par défaut
String getFile()
fichier
String getHost()
hote
String getPath()
chemin
int getPort()
port
String getProtocol()
protocole
String getQuery()
requête
String getRef()
référence (anchor)
String getUserInfo()
informations utilisateurs
Classes
Sockets
Thread
UDP
réseau – p. 17
AppletsProgrammationRéférences
Exemple d’utilisation URLs
import java . net . ∗ ;
import java . io . ∗ ;
//...
URL url = new URL ( "http://service.host.domain/chemin/fichier.
extention?parametre=valeur#fragment" ) ;
System . out . println ( "Authority ="+url . getAuthority ( ) ) ;
System . out . println ( "DefaultPort ="+url . getDefaultPort ( ) ) ;
System . out . println ( "File ="+url . getFile ( ) ) ;
System . out . println ( "Host ="+url . getHost ( ) ) ;
System . out . println ( "Path ="+url . getPath ( ) ) ;
System . out . println ( "Port ="+url . getPort ( ) ) ;
System . out . println ( "Protocol ="+url . getProtocol ( ) ) ;
System . out . println ( "Query ="+url . getQuery ( ) ) ;
System . out . println ( "Ref ="+url . getRef ( ) ) ;
System . out . println ( "UserInfo ="+url . getUserInfo ( ) ) ;
System . out . println ( URLEncoder . encode ( "èàéèabcde !..." , "UTF-8" ) ) ;
//...
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 18
AppletsProgrammationRéférences
Exemple d’utilisation URLs
http://service.host.domain/chemin/fichier.extention?parametre=valeur#fragment
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 19
AppletsProgrammationRéférences
La classe URLConnection
Les méthodes ci-dessous permettent de retrouver des informations sur le document de l’URL
(en-tête du flux)
Introduction
Méthode
Description
long getDate()
date
long getLastModified()
Date de dernière modification
String getContentType()
type MIME du contenu
int getContentLenght()
taille du contenu
String getContentEncoding()
codage du contenu
Map getHeaderField()
tous les champs de l’en-tête
String getHeaderField(String nom)
champ de l’en-tête par nom
String getHeaderField(int num)
champ de l’en-tête par numéro de ligne
InputStream getInputStream()
pour la lecture du contenu
OutputStream getOutputStream()
pour l’upload vers le serveur
Classes
Sockets
Thread
UDP
réseau – p. 20
AppletsProgrammationRéférences
La classe HttpURLConnection
Cette classe étend la classe URLConnection pour la gestion du protocole HTTP
Méthode
Description
String getRequestMethod()
méthode de la requête http (GET, POST, HEADER,
PUT, DELETE...)
boolean usingProxy()
true s’il y a un serveur de Proxy
int getResponseCode()
code de statut http de la requête (HTTP_OK,
HTTP_ACCEPTED, HTTP_NOT_FOUND...)
Introduction
String getResponsableMessage())
message en cas d’erreur
InputStream getErrorSream()
flux d’erreur en cas d’erreur
Classes
Sockets
Thread
UDP
réseau – p. 21
AppletsProgrammationRéférences
La classe URLEncoder et URLDecoder
Ces classes permettent de coder une chaîne de caractères contenant des caractères spéciaux en une chaîne UTF-8.
Méthode
Description
static String URLEncoder.encode(String s, String enc)
String → URLString
suivant l’encodage enc (UTF-8)
String URLDecoder.decode(String s, String enc)
URLString → String
Exemple :
URLEncoder.encode(“abcdeèàéè !...","UTF-8")
retourne “abcde%C3%A8%C3%A0%C3%A9%C3%A8++%21...”
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 22
AppletsProgrammationRéférences
Les sockets
Programmation réseau – p. 23
Connexion : côté client
Ce qu’il faut pouvoir faire :
1. Établir la connexion entre le client et le serveur ⇒ classe Socket
2. Envoyer des messages au serveur ⇒ classe PrintWriter
3. Recevoir des messages du serveur ⇒ classe BufferedReader
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 24
AppletsProgrammationRéférences
La classe Socket
Constructeurs :
•
•
•
•
•
Introduction
Socket()
Socket(String host, int port)
Socket(InetAddress serveurAdd, int port)
Socket(String host, int port, InetAddress localAdd, int
localPort)
Socket(InetAddress serveurAdd, int port, InetAddress localAdd,
int localPort )
Méthode
Description
OutputStream getOutputStream()
flux de sortie vers lequel envoyer les données au serveur
InputStream getInpuStream()
flux d’entrée pour lire les données venant du serveur
void close()
déconnecte et referme la socket
Classes
Sockets
Thread
UDP
réseau – p. 25
AppletsProgrammationRéférences
Envoi et réception des données
Envoi :
1. Connexion :
Socket socket = new Socket(“192.168.0.1”,4345);
2. Création d’un PrintWriter associé au flux de sortie de la socket :
PrintWriter writer = new PrintWriter(socket.getOutputStream());
3. Écriture : writer.println(“message”);
4. Fermeture de la socket : socket.close();
Réception :
1. Connexion :
Socket socket = new Socket(“192.168.0.1”,4345);
2. Création d’un InputStreamReader associé au flux d’entrée de la socket :
InputStreamReader reader = new InputStreamReader(socket.getInputStream()
3. Créer un tampon de lecture BufferedReader associé au flux d’entrée :
BufferedReader buff = new BufferedReader(reader);
4. Lecture : String message = buff.readLine();
5. Fermeture de la socket : socket.close();
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 26
AppletsProgrammationRéférences
Connexion côté serveur :
ServerSocket
Il faut 2 sockets :
•
•
1 socket serveur ServerSocket qui attend des requêtes des clients
1 socket « classique » pour communiquer avec le client
Constructeur :
•
ServerSocket(int numPort)
Méthode
Description
Socket accept()
attend une connexion client, s’il y a une connexion
envoie 1 socket sur un port différent de celui du client
void close()
referme le serveur
1. Écoute du port 5434 :
ServerSocket serveurSock = new ServerSocket(5434):
2. Connexion du client au serveur :
Socket sock = new Socket(“192.168.0.1”,5434);
3. Le serveur créer une connexion socket au client :
Socket sock2 = serveurSock.accept();
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 27
AppletsProgrammationRéférences
Les threads
Programmation réseau – p. 28
Multi-thread
•
•
•
•
•
un processus (application) peut contenir plusieurs threads
Les threads permettent d’exécuter plusieurs portions de code simultanément
Un thread est une pile d’appel
Si l’ordinateur possède plusieurs processeurs, les tâches s’exécutent réellement
simultanément
Sinon, il y a une alternance très rapide entre les piles d’appel
Intérêt pour la programmation réseau :
•
Un serveur va pouvoir gérer plusieurs clients simultanément
La classe java.lang.Thread :
•
•
Introduction
Thread(Runnable target) crée un thread associé à la tâche target
Thread(Runnable target, String name) : crée un thread nommé
Méthode
Description
void start()
démarre le thread
static void sleep(long t)
endort le thread pendant t ms
Classes
Sockets
Thread
UDP
réseau – p. 29
AppletsProgrammationRéférences
L’interface Runnable
•
•
•
Introduction
Un thread n’est pas dissociable de sa tâche (portion de code qu’il exécute)
En Java, la tâche d’un thread est une classe qui implémente l’interface Runnable
Cette interface ne contient qu’une méthode :
Méthode
Description
void run()
1ère méthode à s’exécuter dans un nouveau thread
Pour lancer un nouveau thread, il faut passer un objet Runnable au constructeur
Thread
Classes
Sockets
Thread
UDP
réseau – p. 30
AppletsProgrammationRéférences
Thread : exemple
public class TestRunnable implements Runnable {
public void run ( ) {
methode1 ( ) ; }
public void methode1 ( ) {
System . out . println ( ‘ ‘ Methode 1’’ ) ;
}
}
start
main
methode1
run
thread principal
thread1
public class TestThread {
public static void main ( String [ ] args ) {
Runnable tacheThread = new TestRunnable ( ) ;
Thread thread1 = new Thread ( tacheThread ) ;
thread1 . start ( ) ;
System . out . println ( ‘ ‘ Fini ! ’’ ) ;
}
}
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 31
AppletsProgrammationRéférences
Thread : cycle de vie
•
•
•
•
Quand on lance un thread, celui-ci devient exécutable
Un thread s’exécute quand l’ordonnanceur de la machine virtuelle Java l’a choisi pour
être le thread actif
Sur un ordinateur monoprocesseur, il ne peut y avoir qu’un thread actif à la fois
1 thread peut aussi être bloqué (i.e temporairement non exécutable)
Problème :
•
•
On ne peut pas prévoir le comportement de l’ordonnanceur
L’ordonnanceur peut exécuter un thread pendant trop longtemps au détriment des
autres
Une solution :
Introduction
•
Mettre les threads périodiquement en sommeil (ex : Thread.sleep(4000);) de
manière à désactiver les threads
•
Quand le thread se réveille, il redevient exécutable
Classes
Sockets
Thread
UDP
réseau – p. 32
AppletsProgrammationRéférences
Thread : accès concurrent
•
Les threads partagent les mêmes données
⇒ 2 thread effectuant la même tâche peuvent interferrer
Solution :
•
Vérouiller l’accés aux données pendant l’exécution d’un tâche
Comment :
•
Synchroniser les méthodes qui ont une action sur les données en ajoutant le
modificateur synchronized devant ces méthodes
Inconvénients :
•
•
Introduction
La synchronisation baisse les performances
2 threads peuvent se vérouiller l’un l’autre
Classes
Sockets
Thread
UDP
réseau – p. 33
AppletsProgrammationRéférences
UDP
Programmation réseau – p. 34
Programmation par paquets : UDP
Contructeurs :
•
•
Introduction
DatagramPacket(byte[] buff, int size)
DatagramPacket(byte[] buff, int size, InetAddress dest, int port)
Classes
Méthode
Description
InetAddress getAddress()
adresse ip
int getPort()
port
byte[] getData()
données du paquet
int getLength()
longueur du datagramme
void setAddress(InetAddress ip)
adresse ip
void setPort(int numero)
port
void setData(byte[] data)
données du paquet
void setLength(int length)
longueur du datagramme
Sockets
Thread
UDP
réseau – p. 35
AppletsProgrammationRéférences
La classe DatagramSocket
Cette classe permet d’envoyer et de recevoir les datagrammes
Contructeurs :
•
•
•
DatagramSocket() throws SocketException
DatagramSocket(int numPort) throws SocketException
DatagramSocket(int numPort, InetAddress ip) throws SocketException
Méthode
Description
void send(DatagramPacket paquet)
envoi un paquet
void receive(DatagramPacket paquet)
reçoit un paquet
garde la main jusqu’à la réception d’un paquet
Remarque : Pas de ServerSocket
•
•
Introduction
La même socket sert à la fois à l’envoi et à la reception des données
Un DatagramSocket peut recevoir des données d’un grand nombre de machines distinctes
Classes
Sockets
Thread
UDP
réseau – p. 36
AppletsProgrammationRéférences
La classe DatagramSocket
•
Il est possible de connecter un DatagramSocket à un destinataire
⇒ Cela simplifie l’envoie de série de datagrammes
Introduction
Méthode
Description
void connect(InetAddress addr, int port)
connexion
void disconnect()
déconnexion
•
Afin d’éviter les temps d’attente infinie, on peut fixer un temps d’attente maximum avec
la méthode setSoTimeOut(int tps)
•
Lorsque le délais expire, la méthode receive lève une exception
SocketTimeoutException
Classes
Sockets
Thread
UDP
réseau – p. 37
AppletsProgrammationRéférences
Choix de la taille des datagrams
•
•
•
•
La taille maximale thérorique est 216 − 8 (taille de l’en-tête)
Certains protocoles imposent une taille particulière ⇒ pas le choix
Transfert de fichiers : utiliser la plus grande taille possible
Fiabilité du réseau :
◦
◦
•
Introduction
réseau fiable : grande taille de datagramme
réseau peu fiable : petite taille de datagramme
La taille des datagrammes est souvent 8192 octets
Classes
Sockets
Thread
UDP
réseau – p. 38
AppletsProgrammationRéférences
Les applets
Programmation réseau – p. 39
Les applets
Définition :
Une applet est un petit programme qui s’exécute dans un navigateur Web
•
Une applet est un container de composants graphiques
Côté serveur :
Une applet est généralement un programme graphique (animation,
interface graphique...)
•
•
1. Une applet est définie dans une classe qui hérite de la classe JApplet
Côté client :
3. La classe est définie dans une page HTML
2. La classe est compilée
1. Requête HTTP pour la page HTML
2. Retour de la page HTML
3. Requête de la classe applet
4. La classe applet est téléchargée depuis un serveur Web
5. Elle est ensuite exécutée au sein du navigateur
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 40
AppletsProgrammationRéférences
Applets et sécurité
•
•
•
•
•
Introduction
Les applets ne peuvent pas lire toutes les propriétés du système
Les applets ne peuvent pas lire ou écrire sur le disque local
Les applets ne peuvent pas exécuter des programmes locaux
Les applets ne peuvent pas définir des méthodes natives
Les applets ne peuvent pas se connecter à un autre serveur que le serveur source de
l’applet
Classes
Sockets
Thread
UDP
réseau – p. 41
AppletsProgrammationRéférences
La classe java.applet.Applet
Méthode
Utilisation
void init()
lorsque l’applet est instanciée
void start()
à chaque fois que l’applet devient visible
void stop()
à chaque fois que l’applet devient invisible
void destroy()
lorsque l’applet va être détruite du container du navigateur
void paint(Graphics g)
lorsque l’applet doit être redessinée
Exemple :
Introduction
Classes
import javax . swing . ∗ ;
import java . awt . Graphics ;
public class TestApplet extends JApplet {
public void init ( ) { . . . }
public void start ( ) { . . . }
public void stop ( ) { . . . }
public void destroy ( ) { . . . }
public void paint ( Graphics g ) { . . . }
}
Sockets
Thread
UDP
réseau – p. 42
AppletsProgrammationRéférences
Définition de l’applet dans une page HTML
L’applet est définie par la balise <APPLET> qui peut avoir les propriétés suivantes :
CODE
permet de spécifier le nom de l’applet
CODEBASE
URL où sera téléchargée la classe de l’applet
WIDTH
largeur en pixel de l’applet dans le document HTML
HEIGHT
hauteur en pixel de l’applet dans le document HTML
ALIGN
alignement de l’applet : left, right, middle, top, bottom,texttop
absmiddle, baseline, absbottom
VSPAVE
distance verticale en pixel avec les autres objets
HSPACE
distance horizontale en pixel avec les autres objets
ALT
texte à afficher à la place de l’applet
NAME
nom référence de l’applet dans la page HTML
Paramètres à transmettre à une applet :
<APPLET CODE=”TestApplet.class” WIDTH=300 HEIGHT=200>
<PARAM NAME=”NomArg” VALUE=”ValArg”>
</APPLET>
Récupération des informations par l’applet :
String getParameter(String nom)
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 43
AppletsProgrammationRéférences
Lancer une applet
•
•
Introduction
appletviewer TestApplet.html
lire le fichier avec un navigateur web comprenant une machine virutelle Java
Classes
Sockets
Thread
UDP
réseau – p. 44
AppletsProgrammationRéférences
Applet : exemple
import javax . swing . ∗ ;
import java . awt . ∗ ;
public class TestJApplet2 extends JApplet {
protected JButton bouton = new JButton ( "bouton" ) ;
protected Object [ ] icones = { "icone1.gif" , "icone2.gif" , "icone3.gif" } ;
protected JComboBox combo = new JComboBox ( icones ) ;
protected JButton image = new JButton ( new ImageIcon ( "./nb48x48.gif" ) ) ;
public void init ( ) {
System . out . println ( "init : l’applet vient d’atre instanciee dans le conta
this . getContentPane ( ) . setLayout ( new FlowLayout ( ) ) ;
this . getContentPane ( ) . add ( combo ) ;
this . getContentPane ( ) . add ( image ) ;
}
public void start ( ) {
System . out . println ( "start : l’applet devient visible" ) ;
System . out . println ( this . getDocumentBase ( ) ) ;
System . out . println ( this . getCodeBase ( ) ) ;
}
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 45
AppletsProgrammationRéférences
Applet : exemple
public void stop ( ) {
System . out . println ( "stop : l’applet devient invisible" ) ;
}
public void destroy ( ) {
System . out . println ( "destroy : l’applet va etre detruite du container du n
}
}
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 46
AppletsProgrammationRéférences
Communication et applets
Communication avec le navigateur
AppletContext getAppletContext()
récupère le contexte de l’applet
void showStatus(String texte)
affiche texte dans la barre d’état
du navigateur
affiche un nouveau document
void showDocument(URL url)
dans le navigateur
void showDocument(URL url, String dest)
affiche un nouveau document dans
la frame portant le nom dest
Image getImage(URL url)
charge l’image localisée à l’URL url
AudioClip getAudioClip(URL url)
charge le clip audio localisé à
l’URL url
Communication entre applets
Introduction
Méthodes de l’AppletContext
Comportement
Applet getApplet()
récupère le contexte de l’applet
Enumeration getApplets()
récupère toutes les applets du document
Classes
Sockets
Thread
UDP
réseau – p. 47
AppletsProgrammationRéférences
Références
« Programmation réseau avec Java »
E LLIOTTE RUSTY H AROLD
O’R EILLY, 2001
« Java tête la première »
K ATHY S IERRA , B ERT B ATES
O’R EILLY, 2004
« Java : La maîtrise »
J ÉROME B OUGEAULT
E YROLLES , 2003
Introduction
Classes
Sockets
Thread
UDP
réseau – p. 48
AppletsProgrammationRéférences