Newsgroup: it.comp.java
Titolo: questi cavolo di ObjectInputStream

Com'è possibile che non riesco a far funzionare una semplicissima 
applicazione Clien-server, che usa socket? Mi spiego.
Porzione incriminata di Server
[...]
//mi metto in attesa su una porta,
//creo il socket con
//serversocket.accept() e poi:
System.out.println("creazione degli stream");
ObjectInputStream input = null;
ObjectOutputStream output = null;
try
  {
   input = new ObjectInputStream(new BufferedInputStream(
     socket.getInputStream()));
System.out.println("creato");
  }
  catch (Exception e)
  {
      e.printStackTrace();
      return;
      //CHE FARE?
  }
[...]
Si blocca prima di stampare "creato", e per "si blocca" intendo che non 
succede niente di niente.
Il Client fa questo:
[...]
//si connette, il socket esiste
//creo la richesta
System.out.println("Creazione richista");
Message request = new Message(Message.REQUEST, "SELECT", query);
//scrivo sull'output
ObjectOutputStream output = new ObjectOutputStream(new
	BufferedOutputStream(socket.getOutputStream()));
output.writeObject(request);
System.out.println("richista inviata");
//////////////RISPOSTA/////////////////////////
System.out.println("ricezione risposta");
//preparazione ricezione risultato
ObjectInputStream input = new ObjectInputStream(new BufferedInputStream(
             socket.getInputStream()));
[...]
E anche qui si blocca nel costruttore di OIS.
Sarà sicuramente una stupidata, ma io proprio non capisco...
se inviavo stringhe invece che oggetti (con PrintWriter e 
BufferedReader) non dava problemi.
Perchè??

 applicazione Clien-server, che usa socket? Mi spiego.
Ma cos'è, un improvvisa passione per i socket o c'è un esame imminente?
Comunque, un semplice esempio come il tuo funzionante lo trovi senza 
problemi googlando non più di 10 minuti.

   }
non e' che ti  sei scordato di leggere dall'ObjectInputStream???
dopo  input = new ObjectInputStream( new BufferedInputStream(
socket.getInputStream() ) );
prova a leggere con  Object o=input .readObject();
stessa cosa per il client...
io mi sono creato questa classettina:
import java.net.Socket;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
public class ObjectSerializator {
    public synchronized Object retriveObject(Socket s) throws Exception {
        ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
        Object o=ois.readObject();
        return o;
    }
    public synchronized void sendObject(Socket s, Object o) throws Exception
{
        ObjectOutputStream oos = new
ObjectOutputStream(s.getOutputStream());
        oos.flush();
        oos.writeObject(o);
    }
}
ciao
Claudio

 
Come mai scrivi questo? I socket sono solo "scolastici"?

 BufferedReader) non dava problemi.
Se togli momentaneamente gli stream bufferizzati funziona?
In caso affermativo, magari si tratta solo di aggiungere
un flush() sul lato client...
Saluti
Roberto
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Come mai scrivi questo? I socket sono solo "scolastici"?
No, è un argomento assai gettonato negli ultimi giorni. Un onda anomala.

 [...]
P.S.: I BufferedStream ti servono veramente?
Anche perché se usi un bufferedstream DEVI per forza chiamare il flush()
dopo aver scritto!
-- 
Pietro	- 
http://www.pietroweb.tk
Linux Registered User #304991
Powered by MDK Linux Kernel 2.6.10