Oppure

Loading
28/06/11 11:38
killer
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 28/06/11 11:43
aaa
29/06/11 11:35
tasx
Ciao!

Hai provato con un bel "flush()" ??
aaa
29/06/11 17:38
killer
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 ?
aaa
29/06/11 17:49
killer
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 29/06/11 17:50
aaa
30/06/11 8:33
tasx
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:
    odata.writeObject(command); 

venga tutto inviato, per essere sicuro conviene utilizzare flush.

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

Ciaociao :k::k:



aaa
30/06/11 11:16
killer
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 !?
aaa