Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Invio oggetti Serializati (client/server TCP)
Forum - Java - Invio oggetti Serializati (client/server TCP)

Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 13:38
Martedì, 28/06/2011
salve a tutti avrei un problemino da esporre.
sto sviluppando un applicazione client/server ..
il client  deve necessariamente registrarsi sul server
quindi ho creato un metodo

transferTo(String command,Person p,License lic){
   try{
    ObjectOutputStream odata=new ObjectOutputStream(sock.getOutputStream());
    odata.writeObject(command);
    odata.writeObject(p);
    odata.writeObject(lic);
   }catch(Exception  e){
   }
}

class Person implements Serializable{}
class License implements Serializable{}

vorrei capire una cosa, innanzitutto se provassi semplicemente ad inviare al server il comando 'command', riesco tranquillamente a leggerlo con
    
String command = idata.readObject().toString();

pero se provassi a leggere un oggetto di  classe Person
Person p= (Person) idata.readObject();
non viene letto !!
il server non mi stampa nessun messaggio di errore o altro..
Per esempio se volessi leggere il nome della persona,non me lo visualizza.
System.out.println("Nome: "+p.getName());

Pero il metodo parla chiaro devo  spedire contemporaneamente sia l'oggetto 'Person', sia l'oggetto 'License' e sia il comando 'command'

ho provato inizialmente in 2 modi:

1)odata.writeObject(command+" "+p+" "+lic);

2)odata.writeObject(command);
   odata.writeObject(p);
   odata.writeObject(lic);

pero non so come leggerli sequenzialmente prima il comando e contemporaneamente l'oggetto 'p' e la licenza 'lic'.
fatemi sapere presto...sono giorni che ci sto dietro ma non trovo alcun chiarimento in merito..grazie anticipatamente.

Ultima modifica effettuata da killer il 28/06/2011 alle 13:43
PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 13:35
Mercoledì, 29/06/2011
Ciao!

Hai provato con un bel "flush()" ??

PM Quote
Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 19:38
Mercoledì, 29/06/2011
un flash ? in che senso !? e dove dovrei farlo ?! cmq mi sa che non chiudo neanche l'oggetto con out.close(); :) sarà questo il problema ?

PM Quote
Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 19:49
Mercoledì, 29/06/2011
ecco ho provato ma nada..non funziona..

la funzione odata.writeObject("ciao x esempio"); funziona perfettamente
la funzione odata.writeObject(pers); (Person pers) scritta subito dopo la prima funzione, non viene eseguita in lettura dal server. come mai !? sbaglio qualcosa in scrittura o in lettura ? :( per favore sto diventando matto! aiutatemi

Ultima modifica effettuata da killer il 29/06/2011 alle 19:50
PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 10:33
Giovedì, 30/06/2011
Ciao!

Hai controllato che le operazioni di lettura e scrittura vengano completate correttamente?

magari aggiungendo dei semplici System.out.println... o impostando alcuni breakpoint.

Il metodo flush(presente in tutte le classi che fanno uso di stream) permette di svuotare il buffer e di inviare tutto il contenuto. Non è detto che se tu scrivi:
Codice sorgente - presumibilmente Plain Text

  1. odata.writeObject(command);


venga tutto inviato, per essere sicuro conviene utilizzare flush.

ecco: http://download.oracle.com/javase/1.4.2/docs/api/java/io/O ...

Ciaociao :k::k:




PM Quote
Avatar
killer (Normal User)
Expert


Messaggi: 217
Iscritto: 19/07/2009

Segnala al moderatore
Postato alle 13:16
Giovedì, 30/06/2011
si si.. ho provato anche con flush ma nulla..non funziona...
il problema è quando leggo loggetto, esso non viene letto ..entra nell'eccezione..

try{
   idata=new ObjectInputStream(sock.getInputStream());
   Person p=(Person)idata.readObject();
   System.out.println("nome della persona: "+p.getName());
catch(Exception e){
   System.out.println(e.getMessage());
}

l'esecuzione scatena un eccezione il cui risultato è: test.Person ...
io tento di leggere l'oggetto di classe Person dalla socket ma non accade proprio nulla in lettura ...a differenza invece , se inviassi una stringa , viene letta perfettamente. perche !?

PM Quote