Buonasera! Sono ancora alle prese con una gestione di taxi client-server. Ho reimplementato tutte le classi seguendo i vostri consigli, ma accade una cosa stranissima.
Premetto che per ora ho solo creato 3 classi: Taxi,Gestore e Posizione.
Taxi: client
Gestore: server
Posizione: solo 2 attributi (2 interi) e un costruttore
Ecco il Taxi
codice:
import java.io.*;
import java.lang.*;
import java.util.*;
import java.net.*;
public class Taxi implements Runnable,Serializable{
private Socket s;
private boolean libero;
private Posizione p;
protected int id;
protected ObjectOutputStream oos;
protected ObjectInputStream ois;
public Taxi(){
//taxi creato
}
public Taxi(int a, int b, boolean l){
p = new Posizione(a,b);
libero = l;
}
public static void main(String args[]){
Taxi tx = new Taxi();
Thread t = new Thread(tx);
t.start();
}
public void run(){
try{
s = new Socket("localhost", 12345);
oos = new ObjectOutputStream(s.getOutputStream());
ois = new ObjectInputStream(s.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
oos.writeObject(true);//dico al server che sono un taxi
oos.flush();
System.out.println("Inserisci le tue coordinate: ");
int a = Integer.parseInt(br.readLine());
int b = Integer.parseInt(br.readLine());
System.out.println("Stato del taxi: "+true);
Taxi otx = new Taxi(a,b,true);
System.out.println("Mando oggetto taxi al server");
oos.writeObject(otx);
}
catch(IOException e){System.out.println("Error "+e);}
}
}
Sul client non accade nulla di strano. Ecco il server:
codice:
import java.io.*;
import java.util.*;
import java.lang.*;
import java.net.*;
public class Gestore implements Runnable,Serializable{
private ServerSocket ss;
private Socket cs;
protected LinkedList <Taxi> taxilist = new LinkedList <Taxi> ();
protected ObjectOutputStream oos;
protected ObjectInputStream ois;
public Gestore(){
//Gestore creato
}
public static void main(String args[]){
Gestore g = new Gestore();
Thread t = new Thread(g);
t.start();
}
public void run(){
try{
ss = new ServerSocket(12345);
boolean id;
while(true){
System.out.println("Ciao sono il Server");
cs = ss.accept();
oos = new ObjectOutputStream(cs.getOutputStream());
ois = new ObjectInputStream(cs.getInputStream());
id = (boolean) ois.readObject();
System.out.println(ois.available());
if(id == true) {
System.out.println("Benvenuto Taxi");
int tid = taxilist.size() +1;
Taxi app = new Taxi();
app = (Taxi) ois.readObject();
app.id = tid;
taxilist.add(app);
//CHIAMATA THREAD GESTORETAXI
}
else{
//CHIAMATA THREAD GESTORECLIENTI
}
}
}
catch(IOException e){System.out.println("Error "+e);}
catch(ClassNotFoundException e){System.out.println("Error "+e);}
}
}
Qui dopo aver eseguito la prima readObject() ovvero la lettura del booleano che mi identifica il taxi, non legge più nulla e và in Socket Exception: connection reset
precisamente la riga di codice che dovrebbe essere incriminata è questa
codice:
app = (Taxi) ois.readObject();
E' un giorno intero che sbatto la testa su questo problema, ho provato di tutto! Grazie per l'attenzione