Newsgroup: it.comp.java
Titolo: socket

Codice uguale a quello fatto passare poco tempo addietro ma invece di
leggere da un bufferreader leggo e scrivo Object.... qui gli invii non
dovrebbero centrava una pippina. Ma allora perche''''' non va una
seghicchia?
Qual'e' la cagata che ho dimenticato stavolta?
import java.io.*;
import java.net.*;
class Server
{
    public static void main(String argv[]) throws Exception
    {
        Socket socket = new ServerSocket(1234).accept();
        ObjectInputStream  in  = new ObjectInputStream
(socket.getInputStream());
        ObjectOutputStream out = new
ObjectOutputStream(socket.getOutputStream());
        System.out.println((String)in.readObject());
        out.writeObject("caccona"); out.flush();
        out.close();
        in.close();
    }
}
class Client
{
    public static void main(String argv[]) throws Exception
    {
        Socket socket = new Socket ("127.0.0.1",1234);
        ObjectInputStream  in  = new ObjectInputStream
(socket.getInputStream());
        ObjectOutputStream out = new
ObjectOutputStream(socket.getOutputStream());
        out.writeObject("ciccina"); out.flush();
        System.out.println((String)in.readObject());
        out.close();
        in.close();
    }
}
P.S. Scusate il gergo.

Java e' da iniziati.
Sono riuscito a far funzionare il codice inviato poco fa e vi mando la
soluzione nella speranza che possa evitare ad altre persone di perderci
delle ore.
L'ordine delle getInputStream e getOutputStream nel client e nel server e'
significativo!
Ho fatto tutte le prove possibili. Abbrevio getInputStream con "out" e
getOutputStream  con "in". Ecco i risultati:
Server: out  in
Client:   out in        ok
--------
Server:  in out
Client:   out in        ok
-------
Server:  out in
Client:    in out       ok
-------
Server:  in out
Client:   in out        NO!!!!!
-------
Ma la cosa piu' godibile e' che il casino lo fa solo con gli ObjectStream e
non con i Buffered!!!!!!
Si si, avete capito bene. Ho rifatto le quattro prove usando BufferedReader
e BufferedWriter al posto di ObjectInputStream e ObjectOutputStream e tutte
e quattro funzionano...
Se mi convincete che non e' un baco vi invito a casa mia che faccio un
brasato con i miei testicoli.
Comunque sia riporto uno dei quattro codici funzionanti che utilizza gli
ObjectStream.
//Client server che si mandano oggeti. Versione funzionante
//notare l'ordine delle getInputStream e getOutputStream
import java.io.*;
import java.net.*;
class Server
{
    public static void main(String argv[]) throws Exception
    {
        Socket socket = new ServerSocket(1234).accept();
        ObjectInputStream  in  = new ObjectInputStream
(socket.getInputStream());
        ObjectOutputStream out = new
ObjectOutputStream(socket.getOutputStream());
        System.out.println((String)in.readObject());
        out.writeObject("caccona"); out.flush();
        out.close();
        in.close();
    }
}
class Client
{
    public static void main(String argv[]) throws Exception
    {
        Socket socket = new Socket ("127.0.0.1",1234);
        ObjectOutputStream out = new
ObjectOutputStream(socket.getOutputStream());
        ObjectInputStream  in  = new ObjectInputStream
(socket.getInputStream());
        out.writeObject("ciccina"); out.flush();
        System.out.println((String)in.readObject());
        out.close();
        in.close();
    }
}

Un amico fuori dal newsgroup (tale Milesi Michele) mi ha segnalato l'errore
da pivellino che ho commesso. Ve lo comunico qualora interessasse anche
altri.
Ad ogni readLine() va associata una write() seguita da un newLine() e non
solo una write()...
Mi cospargo il capo di cenere.
Saluti.
----------------------
Qualche anima pia sa dirmi il perche' 'sta robba non va?
Per provarla compilate, fate partire la classe Server in una finestra
terminale e poi la classe Client in un altra. I due programmi dovrebbero
comunicare via tcp e il server dovrebbe stampare cio' che il client gli
manda (ovvero "ciccina"),  mentre il client dovrebbe stampare cio' che il
server gli manda (ovvero  "caccona").
I due programmi non terminano e rimangono in attesa indefinita sulla
istanziazione di in e out.
Vacca maiala, perche'??????????????????????
Uso il jdk 1.2.0 sotto Nt 4 SP4
import java.io.*;
import java.net.*;
class Server
{
    public static void main(String argv[]) throws Exception
    {
        Socket socket = new ServerSocket(1234).accept();
        BufferedReader in  = new BufferedReader(new InputStreamReader
(socket.getInputStream()));
        BufferedWriter out = new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream()));
        String s=in.readLine();    System.out.println(s);
        out.write("caccona");      out.flush();
        out.close();
        in.close();
    }
}
class Client
{
    public static void main(String argv[]) throws Exception
    {
        Socket socket = new Socket ("127.0.0.1",1234);
        BufferedReader in  = new BufferedReader(new InputStreamReader
(socket.getInputStream()));
        BufferedWriter out = new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream()));
        out.write("ciccina");       out.flush();
        String s=in.readLine();     System.out.println(s);
        out.close();
        in.close();
    }
}