Christophe Jacquet: Research and Teaching

Enseignement > Exemples en Java >

Java : transmettre des objets via le réseau (sockets)

On utilise souvent les sockets de Java pour transmettre du texte. Cependant, grâce aux ObjectOutputStream et ObjectInputStream, il est tout aussi facile de transmettre tout type d'objets Java, tableaux compris.

L'exemple suivant démontre cette possibilité dans le cas d'un tableau d'entiers. Notez à quel point la classe Serveur et la classe Client sont proches.

/* ############################################################################
 * 
 * Serveur.java : transmission de tableaux Java via des sockets
 * Client.java   
 * 
 * Auteur : Christophe Jacquet, Supélec
 * 
 * Historique
 * 2012-06-21  Création
 * 
 * ############################################################################
 */

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;

public class Serveur {
	static final int port = 9999;

	public static void main(String[] args) throws Exception {
		ServerSocket s = new ServerSocket(port);
		System.out.println("Socket serveur: " + s);

		Socket soc = s.accept();

		System.out.println("Serveur a accepte connexion: " + soc);

		ObjectOutputStream out = new ObjectOutputStream(soc.getOutputStream());
		out.flush();

		ObjectInputStream in = new ObjectInputStream(soc.getInputStream());


		System.out.println("Serveur a cree les flux");

		int[] tableauAEmettre = {7, 8, 9};

		out.writeObject(tableauAEmettre);
		out.flush();

		System.out.println("Serveur: donnees emises");

		Object objetRecu = in.readObject();
		int[] tableauRecu = (int[]) objetRecu;

		System.out.println("Serveur recoit: " + Arrays.toString(tableauRecu));

		in.close();
		out.close();
		soc.close();
	}
}
/* ############################################################################
 * 
 * Serveur.java : transmission de tableaux Java via des sockets
 * Client.java   
 * 
 * Auteur : Christophe Jacquet, Supélec
 * 
 * Historique
 * 2012-06-21  Création
 * 
 * ############################################################################
 */

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Arrays;

public class Client {
	static final String serverName = "localhost";
	static final int serverPort = 9999;

	public static void main(String[] args) throws Exception {
		Socket socket = new Socket(serverName, serverPort);
		System.out.println("Socket client: " + socket);

		ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
		out.flush();

		ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

		System.out.println("Client a cree les flux");

		int[] tableauAEmettre = {1, 2, 3};

		out.writeObject(tableauAEmettre);
		out.flush();

		System.out.println("Client: donnees emises");

		Object objetRecu = in.readObject();
		int[] tableauRecu = (int[]) objetRecu;

		System.out.println("Client recoit: " + Arrays.toString(tableauRecu));

		in.close();
		out.close();
		socket.close();
	}
}