Gli esercizi sono gli stessi dell’esercitazione precedente.
In questo caso però usiamo la serializzazione per inviare oggetti su socket.
Nel codice sorgente dato, una classe SegmentClient
utilizza una classe Segment
locale
La classe Segment
a sua volta usa la classe Point
public class Point {
double x, y;
final double THRESHOLD = 0.0000001;
public Point(double tx, double ty){
x=tx; y=ty;
}
public double getX(){
return x;
}
public double getY(){
return y;
}
public boolean isEqual(Point p){
return (Math.abs(x - p.getX()) < THRESHOLD) &&
(Math.abs(y - p.getY()) < THRESHOLD);
}
}
public class Segment {
private Point p1=null;
private Point p2=null;
public Segment(){ }
public boolean set(Point p1, Point p2) {
if(!p1.isEqual(p2)) {
this.p1=p1; this.p2=p2;
return true;
} else {
return false;
}
}
private Point midPoint(){
double mx,my;
mx=(p1.getX()+p2.getX())/2;
my=(p1.getY()+p2.getY())/2;
return(new Point(mx, my));
}
public Point simmetric(Point p) {
Point m = this.midPoint();
double simmX=2*m.getX()-p.getX();
double simmY=2*m.getY()-p.getY();
return new Point(simmX, simmY);
}
}
public class SegmentClient {
public static void main(String[] args) {
Point p1=new Point(0.0, 0.0);
Point p2=new Point(4.0, 4.0);
Point px=new Point(0.0, 4.0);
Segment sgm=new Segment();
sgm.set(p1, p2);
Point simm = sgm.simmetric(px);
System.out.println("Il punto simmetrico e` ("+simm.getX()+","+simm.getY()+")");
}
}
Si vuole realizzare un server che sia un grado di accettare connessioni via socket e che implementi le seguenti richieste da parte dei client:
Creazione di segmento
In questo caso un client scrive sul socket il comando “NewSegment” seguito da due oggetti di classe Point che rappresentano gli estremi del segmento.
Il server risponde “OK” o “KO” a seconda che l’operazione sia riuscita o meno.
Trovare il punto simmetrico, rispetto al segmento, di un punto dato.
Il client scrive sul socket il comando “Simmetrico” seguito dall’oggetto di classe Point di cui si vuole trovare il simmetrico.
Il server risponde scrivendo sul socket l’oggetto di classe Point richiesto.
Si implementi il server descritto
Si vuole che molti client possano accedere contemporaneamente al server, ma ciascuno per creare e usare un proprio segmento (diverso da quello degli altri client).
Nell’esercitazione precedente, non avendo ancora visto la serializzazione, client e server si scambiavano solo stringhe di caratteri.
Adesso invece vogliamo implementare una soluzione che non soffre di tale limitazione: client e server si scambiano oggetti serializzati.
NB: questo implica che il client deve conoscere e usare la classe Point, e che client e server devono usare la medesima versione della classe
ClientThread.java
MultiClient.java
MultiServer.java