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() ;@
    }
}