Exercices
Echange d’objets
Toujours un client graphique et un serveur autonome :
Le client qui veut se connecter au serveur, génère un objet de type java.time.Instant
par : Instant.now()
L’objet est envoyé au serveur qui le lit et le renvoie accompagné d’un autre Instant
généré sur le serveur.
Le code client lit les deux Instant
, en génère un troisième et affiche les 3 objets. (on pourra ainsi constater les dérives éventuelles des horloges!).
Pour tester les performances relancer plusieurs requêtes successives depuis le client.
Pour les très rapides: sur le serveur tracez les caractéristiques de votre interlocuteur (adresse IP).
Propositions de corrigé :
Exemples
package org.labs.objio;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.time.Instant ;
// l'autre package exercices
import org.labs.net.Serveur;
public class ServeurTemps extends Serveur{
@Override
public void lireEcrire( Socket sck ) throws Exception {
OutputStream os = sck.getOutputStream() ;
InputStream is = sck.getInputStream() ;
ObjectOutputStream oos = new ObjectOutputStream(
new BufferedOutputStream(os)) ;
ObjectInputStream ois = new ObjectInputStream(
new BufferedInputStream(is)) ;
Object obj = ois.readObject() ;
Instant ts = Instant.now() ;
oos.writeObject(obj) ;
oos.writeObject(ts) ;
oos.flush();
}
public ServeurTemps(int port) throws IOException { super(port) ;}
public static void main (String[] args) throws Exception {
Serveur serv = new ServeurTemps(Integer.parseInt(args[0])) ;
serv.go() ;
}
}
package org.labs.objio;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.time.Instant ;
import java.net.Socket;
import java.util.StringTokenizer;
import org.labs.ihm.Repondeur;
public class RepondeurTemps implements Repondeur {
@Override
public String repondA(String question) throws Exception {
StringTokenizer stk = new StringTokenizer(question);
String host = stk.nextToken();
int port = Integer.parseInt(stk.nextToken());
Socket sck = new Socket(host, port);
OutputStream os = sck.getOutputStream();
InputStream is = sck.getInputStream();
ObjectOutputStream oos = new ObjectOutputStream(
new BufferedOutputStream(os));
Instant ts = Instant.now() ;
oos.writeObject(ts);
oos.flush();
ObjectInputStream ois = new ObjectInputStream(
new BufferedInputStream(is));
Object obj = ois.readObject();
Object obj2 = ois.readObject();
return obj + "\n" + obj2 + "\n" + Instant.now() ;@
}
}