Introduction
Java propose un ensemble de classes pour la programmation réseau. Ces classes sont regroupées dans le paquetage java.net.
On peut programmer très facilement des architectures client/serveur en mode TCP ou UDP à l’aide des classes proposées.
Un premier serveur TCP (en Java 1.0) Des améliorations à ce serveur vont être données par la suite.
// Exemple inspire du livre _Java in a Nutshell_
import java.io.*;
import java.net.*;
public class MonServeurSimple {
public final static int DEFAULT_PORT = 6789;
protected int port;
protected ServerSocket listen_socket;
protected DataInputStream in;
protected PrintStream out;
// traitement des erreurs
public static void fail(Exception e, String msg) {
System.err.println(msg + « : » + e);
System.exit(1);
}
Conclusion : serveur TCP en Java 1.0
On utilise donc la structure de code :
ServerSocket listen_socket = new ServerSocket(port);
Socket client_socket = listen_socket.accept();
DataInputStream in = new
DataInputStream(client.getInputStream());
PrintStream out = new
PrintStream(client.getOutputStream());
Client TCP en Java 1.0
// Exemple inspire du livre _Java in a Nutshell_
import java.io.*;
import java.net.*;
public class MonClient {
public static final int DEFAULT_PORT = 6789;
public static void usage() {
System.out.println(« Usage: java MonClient
<machineServeur> [<port>] »);
System.exit(0);
}
public static void main(String[] args) {
int port = DEFAULT_PORT;
Socket s = null;
// initialise le port
if ((args.length != 1) && (args.length != 2))
usage();
if (args.length == 1) port = DEFAULT_PORT;
else {
try { port = Integer.parseInt(args[1]); }
catch (NumberFormatException e) {
usage(); }
}
try {
// Cree une socket pour communiquer
// avec le service se trouvant sur la
// machine args[0] au port port
s = new Socket(args[0], port);
// Cree les streams pour lire et ecrire
// du texte dans cette socket
DataInputStream sin = new
DataInputStream(s.getInputStream());
PrintStream sout = new
PrintStream(s.getOutputStream());
Conclusion : client TCP Java 1.0
On utilise donc la structure de code :
Socket socket = new Socket(machineDist, port);
DataInputStream in =new DataInputStream(socket .getInputStream());
PrintStream out =new PrintStream(socket .getOutputStream());
Résultat de l’exécution Sur la machine serveur :
java MonServeurSimple 8888
Sur la machine client :
java MonClient MachineDist 8888
Connected to MachineDist/163.173.XXX.XXX:8888
> bonjour
ruojnob
> ca marche tres bien
neib sert ehcram ac
> au revoir
riover ua
La classe InetAddress
Les objets de cette classe modélise les adresses IP. Ils sont utilisés par exemple comme argument des constructeurs de la classe Socket.
Cette classe donne aussi des renseignements sur l’adresse IP à l’aide de méthodes statiques. Par exemple pour obtenir l’adresse IP de la machine locale on utilise :
InetAddress.getLocalHost()
public static InetAddress getLocalHost() throws UnknownHostException
Ceci est très utile pour lancer un client et un serveur sur la même machine locale. On écrit alors :
Socket serv = new Socket(InetAddress.getLocalHost(), 4567);
……..
La programmation réseau (194 KO) (Cours PDF)