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
Alla riga "pizza = (Pizza)ois.readObject();" il client riceve dal server un oggetto di tipo stringa.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; } }
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:
Il problema è il seguente: il client arriva alla riga incriminata prima che il server abbia scritto qualcosa su canale, tuttavia immediatamente solleva questa eccezzione:codice:try { oos.writeObject(p); oos.flush(); oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
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?

Rispondi quotando
