Buona sera a tutti, ho un problema java che mi sta tormentando da questa mattina e ho davvero bisogno di aiuto per risolverlo.
Il problema è rappresentato dall'invio di una classe mediante objectInputStream e objectOutputStream.
Questa è la classe cliente
codice:
public class Cliente {
static int port = 6000;
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) {
Socket socket = null;
String str = null;
Pizza pizza = null;
PrintStream ps;
ObjectInputStream ois;
try {
socket = new Socket("localhost", port); //creo la socket
ps = new PrintStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());
System.out.println("Benvenuto in pizzeria");
do {
str = pizza(); //chiedo l'ordine
ps.print(str+"\r\n"); //invio sulla rete
ps.flush();
try {
pizza = (Pizza)ois.readObject();
ois.close();
System.out.println("Ho ricevuto una bella "+pizza.getType());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}while(!str.equals("exit"));
System.out.println("Arrivederci");
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String pizza() {
String str = null;
System.out.println("Quante pizze vuoi?"); //stampo a video la richiesta
try {
str = br.readLine(); //leggo l'ordine
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return str;
}
}
Alla riga "pizza = (Pizza)ois.readObject();" il client riceve dal server un oggetto di tipo stringa.
L'oggetto di tipo stringa è così definito:
codice:
public class Pizza implements Serializable {
private static final long serialVersionUID = 1L;
String nome;
public Pizza() {
nome = "Margherita";
}
public String getType() {
return nome;
}
}
E questo è il frammento della classe pizzaiolo responsabile dell'invio:
codice:
try {
oos.writeObject(p);
oos.flush();
oos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Il problema è il seguente: il client arriva alla riga incriminata prima che il server abbia scritto qualcosa su canale, tuttavia immediatamente solleva questa eccezzione:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.pee kByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at Cliente.main(Cliente.java:39)
Sapete dirmi da cosa può essere causata?