Cet article permet de revoir les principales façons de construire une connexion, en tant que serveur ou que client, et de faire transiter des données provenant de sites Internet.
Les bases pour établir une connexion
On commence par créer une socket :
Socket s = new Socket(addr, port); BufferedRerader in = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = ""; while (line != null) line = in.readLine();
- setTimeout : Ferme une socket après le délai passé en paramètre (en ms).
Les lectures suivantes déclenchent alors une IOException. Pas de contrôle dans le constructeur, il vaut mieux utiliser un thread. Si la connexion ne se fait pas, le programme bloque.
On pourra alors utiliser SocketOpener.openSocket(addr, port, timeout); - InetAddress :
getByName(String url)
(fournit un nom) ,getBytes()
(fournit l’IP),getAllByName(String url)
(liste d’InetAddress)
Établir un serveur
Utiliser la classe ServerSocket(port). cnx = socket.accept()
permet d’attendre une connexion d’un client, et renvoit une socket. Possibilité ensuite d’effectuer des opérations d’entrée/sortie :
- InputStreamReader, PrintWriter : texte
- DataInputStream, DataOutputStream : objet
- ObjectInputStream / ObjectOutputStream : série d’objets.
Terminer enfin par un socket.close()
;
Il est nécessaire d’utiliser des threads pour pouvoir gérer des connexions multiples.
L’API JavaMail permet de gérer l’envoie des mails avancés (pièces-jointes, etc), par la classe Transport.
Connections aux URLs
On utilisera les classes URL
ou URLConnexion
.
Principales méthodes permettant d’initialiser la connexion :
- setDoInput
- setDoOutput : Permet de récupérer un flux de sortie (envoi de requetes POST notamment)
- setIfModifiedSince : On ne cherche que des données dont la modification est supérieure à une date donnée.
- setUseCaches : Utilisé seulement pour les applets, recherche dans le cache.
- setAllowUserInteractions : Autorise la demande d’un mot de passe pour accéder à des pages protégées. Nécessite cependant des bibliothèques de navigateurs pour permettre les interactions.
- setRequestProperty : Permet de définir des propriétés telles que des paramètres d’identifications (
cf
ci-dessous).
Ensuite on se connecte : urlConnexion.connect()
;
On peut récupérer les variables d’en-tête :
- getHeaderFieldKey(int i) : Récupère la clef no i
- getHeaderField(int i) : Récupère le champ complet no i.
- getContentType(), getContentLength(), getContentEncoding(), getDate(), getExpiration, getLastModified, …
Accéder à du contenu protégé :
- String input = login + « : » + pass;
- base64.encode(input);
- setRequestProperty(« Authorization », »Basic » + encoding);
Accès par FTP : identification contenue dans l’adresse : ftp://login:pass@adresse
Accès par SSL : Les applets en bénéficient car héritent des fonctionnalités du navigateurs. Pour le reste, se référer à http://java.sun.com/products/plugin/1.2/docs/https.html
Envoi des données en POST :
- setDoOutput(true);
- printWriter.print(nom + « = » + value + « & » ”ou « n »);
Accès à une page inexistante :
- FileNotFoundException
- ((HttpURLConnexion) connexion).getErrorStream();
Problème de connexion à un site distant par applet :
- Possibilité de passer par un proxy.