Stai usando male le classi e i metodi per l'I/O. Se da un lato usi una readLine(), dall'altro lato dovrai usare un qualcosa di "speculare", cioè un metodo che scriva una linea, quindi una serie di caratteri terminati da un newline. Ma non basta. Quando si inviano su degli stream di byte dei caratteri, c'è sempre la questione del charset usato per codificare i caratteri in una sequenza di byte!!Originariamente inviato da nicola
codice:richiesta.writeChars(nome); richiesta.writeChars(Cognome); richiesta.writeChars(Indirizzo);codice:String nome = richiesta.readLine(); String cognome = richiesta.readLine(); String indirizzo = richiesta.readLine();
Ora, se vai a leggere la documentazione di writeChars() nella classe java.io.DataOutput (è una interfaccia implementata da ObjectOutputStream, nota bene), vedrai che dice:
Writes every character in the string s, to the output stream, in order, two bytes per character. [...] For each character, two bytes are actually written, high-order byte first [...]
E nel server hai usato readLine() di ObjectInputStream che tra l'altro è pure un metodo deprecato (la documentazione dice che non converte in modo appropriato i byte in caratteri).
Quindi:
a) ObjectInputStream/ObjectOutputStream in genere si usano quando entra in ballo la "serializzazione" degli oggetti.
b) Se devi inviare/ricevere stringhe su stream di byte, fai in modo da usare un charset che sia comune al client e al server.
c) Se devi trasferire stringhe a "linee", fai in modo che da un lato venga scritta una linea (caratteri+newline) e dall'altra parte la lettura si aspetti la stessa cosa (caratteri+newline).