Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    13

    EOFException-readObject

    ciao a tutti,ho un problema..
    sto facendo un programma in java, devo gestire la connessione tra client e server (multi3d)..e devo inviare messaggi di stream tramite readObject e writeObject tra client e server, messaggi di login, registrazione, di ricezione notizie, invio messaggi..
    il programma parte poi a volte dopo un po' si blocca e mi dice
    java.io.EOFException
    e mi da l'errore sulla readobject di un messaggio (è un tipo di messaggio normale al quale poi viene fatto un cast per renderlo di tipo login/registrazione/notizia....)
    non capisco perchè a volte parte questa eccezione, non parte sempre nello stesso punto e non parte dopo lo stesso tempo, parte ogni tanto quando vuole dove vuole
    cosa vuol dire?
    se riuscite ad essermi di aiuto..grazie mille!

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    66
    allora io ti so solo dire che l'eccezione riguarda End of File!!

    nn è che leggi le cose da inviare da file e nn fai i giusti controlli??? cmq c'è di mezzo un file sennò nn penso che l'eccezione abbia senso!!

    fammi sapere

    ciauz

  3. #3

    Re: EOFException-readObject

    Originariamente inviato da VaL3
    ciao a tutti,ho un problema..
    sto facendo un programma in java, devo gestire la connessione tra client e server (multi3d)..e devo inviare messaggi di stream tramite readObject e writeObject tra client e server, messaggi di login, registrazione, di ricezione notizie, invio messaggi..
    il programma parte poi a volte dopo un po' si blocca e mi dice
    java.io.EOFException
    e mi da l'errore sulla readobject di un messaggio (è un tipo di messaggio normale al quale poi viene fatto un cast per renderlo di tipo login/registrazione/notizia....)
    non capisco perchè a volte parte questa eccezione, non parte sempre nello stesso punto e non parte dopo lo stesso tempo, parte ogni tanto quando vuole dove vuole
    cosa vuol dire?
    se riuscite ad essermi di aiuto..grazie mille!
    Posta cosa ti scrive di preciso insieme a java.io.EOFException quando ti esce l'errore...di solito ci sono delle informazioni per capire dov'è il problema. :master:

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    13
    Originariamente inviato da madiron
    allora io ti so solo dire che l'eccezione riguarda End of File!!

    nn è che leggi le cose da inviare da file e nn fai i giusti controlli??? cmq c'è di mezzo un file sennò nn penso che l'eccezione abbia senso!!

    fammi sapere

    ciauz
    si nel programma ci sono di mezzo dei file perchè devo salvare gli utenti che si registrano e i commenti che vengono lasciati, avevo impostato gli stream i metodi e tutto il necessario per usare i file (metodi per scaricare da un arraylist su file e per caricare da file su arraylist) ma davano degli errori e siccome era più importante finire l'interfaccia avevo commentato tutto quel che riguardava i file per sistemarli poi quando avevo piu tempo
    almeno mi sembrava di aver commentato tutto ora controllo..
    ma devono c'entrare per forza i file?perchè sui javadoc ho trovato questa descrizione per l'eofexception

    Signals that an end of file or end of stream has been reached unexpectedly
    during input.This exception is mainly used by data input streams to
    signal end of stream.

    e siccome l'errore me lo da su una readobject pensavo fosse per quello ma non per file..

    cmq grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    13

    Re: Re: EOFException-readObject

    Originariamente inviato da Matteo982
    Posta cosa ti scrive di preciso insieme a java.io.EOFException quando ti esce l'errore...di solito ci sono delle informazioni per capire dov'è il problema. :master:

    Ciao.

    la parte relativa all'eccezione nel codice è questa

    catch (Exception e) {
    System.err.println("SERVER Errore nella porta: 2222.");
    e.printStackTrace();
    System.exit(-1);
    }

    e quando si solleva l'eccezione, nella console escono questi errori

    SERVER Errore nella porta: 2222. //stampa per quando entra nell'eccezione
    java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.pee kByte(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at Connessione.KKMultiServerThread.run(KKMultiServerT hread.java:64)

    KKMultiServerThread.java:64 //sarebbe questa linea --> m=(Message)input.readObject();


    c'è un cast perchè dal client arrivano messaggi di tipo login, registrazione, command..poi viene ricevuto all'inizio come un message e poi inizia una serie di if
    if(m instanceof .....)


    boh grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    66
    guarda io personalmente senza sapere tutto il codice nn ti saprei aiutare!! se usi gli ObjectInputStream e ObjectOutputStream possono darti parecchi grattacapi se nn li utilizzi perfettamente!

    ad esempio a me una volta mi dava errori strani! era perche ad ogni write dovevo associare una read sia dal lato server che dal lato client!

    e per questo mi dava problemi, io tipo effettuavo due read e write di seguito e mi dava problemi...

    tu hai di questi casi???

    un'altra causa di errore potrebbe (ma nn vuol dire che lo sia) essere che istanzi più volte gli InputStream e OutputStream!!
    a me anche questa cosa mi dava problemi!!!

    bhe nn so che consigliarti di piu!!!

    ciau

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    13
    Originariamente inviato da madiron
    guarda io personalmente senza sapere tutto il codice nn ti saprei aiutare!! se usi gli ObjectInputStream e ObjectOutputStream possono darti parecchi grattacapi se nn li utilizzi perfettamente!

    ad esempio a me una volta mi dava errori strani! era perche ad ogni write dovevo associare una read sia dal lato server che dal lato client!

    e per questo mi dava problemi, io tipo effettuavo due read e write di seguito e mi dava problemi...

    tu hai di questi casi???

    un'altra causa di errore potrebbe (ma nn vuol dire che lo sia) essere che istanzi più volte gli InputStream e OutputStream!!
    a me anche questa cosa mi dava problemi!!!

    bhe nn so che consigliarti di piu!!!

    ciau
    penso che la causa invece sia prorpio quest'ultima..
    la prima non puo essere perchè ho piu volte controllato che ci siano tante write quante read, quindi non è quella
    invece dovrebbe essere per il fatto che istanzio piu volte gli stream..solo che non so che fare..
    cioè in pratica io ho creato client e server, nella classe client vengono dichiarati all'inizio gli stream

    codice:
    InputStream ip;
    ObjectInput input;
    OutputStream op;
    ObjectOutput output;
    poi c'è un metodo INIZIA che inizializza gli stream
    codice:
    ip = soc.getInputStream();
    input = new ObjectInputStream(ip);
    		
    op = soc.getOutputStream();
    output = new ObjectOutputStream(op);
    e poi c'è il MAIN che istanzia un client e richiama questo metodo inizia
    codice:
    Client c=new Client();
    c.Inizia();
    poi sempre nel MAIN viene chiamato il menu dell'interfaccia grafica
    codice:
    SMain sm=new SMain();
    sm.MenuStart();
    è l'interfaccia iniziale che contiene i campi REGISTRAZIONE, LOGIN, MODIFICA DATI e CANCELLAZIONE

    poi vabbè ci sono tutti i metodi login, registra, per inviare notizie, per inviare commenti (Sto facendo un programma per i feed rss)
    nei vari metodi ci sono le varie write e read per gestire la comunicazione tra client e server
    poi ci sono le classi registrazione, login...che associano i metodi all'interfaccia grafica

    per esempio nella registrazione, in un metodo creo i vari bottoni, le label e robe varie, e nell'altro metodo, collegato all'action listener, si gestiscono le operazioni

    questo è un esempio

    codice:
    	
    public void actionPerformed(ActionEvent e) {
           Client cli=new Client(); 
           String pass=new String(p.getPassword());
    		
           if(e.getActionCommand().equals("ok")){
        	   try {
        		   //controllo che i campi siano tutti inseriti
        		   if((n.getText().equals(""))||(pass).equals("")||(nk.getText().equals(""))||(c.getText().equals(""))){
        			   NullMsg nm=new NullMsg();
        			   nm.Message();
        		   }else{
        			   this.setVisible(false);
        			   cli.Inizia(); 
        			   cli.registra(n.getText(),c.getText(),pass,nk.getText()); 
        		   }
        	   } catch (IOException e1) {
        		   e1.printStackTrace();
        	   }
           }else if(e.getActionCommand().equals("cancel")){
        	   n.setText("");
        	   p.setText("");
        	   nk.setText("");
        	   c.setText("");
           }
    		
    	}
    o un altro esempio, la login, c'è il metodo

    codice:
    public void actionPerformed(ActionEvent e) {
    		Client cli=new Client(); 		
    		String pass=new String(p.getPassword());
    		
    		if(e.getActionCommand().equals("ok")){
    			try {
    				if((pass.equals(""))||(nk.getText().equals(""))){
    					NullMsg nm=new NullMsg();
    					nm.Message();
    				}else{
    					cli.Inizia(); 
    					cli.login(nk.getText(),pass); 					this.setVisible(false);
    					
    				}
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			} catch (ClassNotFoundException e1) {
    				e1.printStackTrace();
    			}
    		}else if(e.getActionCommand().equals("cancel")){
    			nk.setText("");
    			p.setText("");
    		}
    		
    	}
    ho colorato in rosso le parti che riguardano il client..
    cosi istanzio ogni volta il client e richiamo il metodo client che inizializza gli stream...
    a quanto pare è sbagliato fare cosi ma erano stati proprio gli esercitatori a consigliarmi di fare cosi
    come potrei fare?se è troppo complicato da capire cosi non importa, grazie cmq

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    66
    Allora a mio modo di vedere inizializzarli sempre è sbagliato ( puo portare problemi e non è neanche tanto bellino da vedere )
    ho visto una cosa di strano! come mai usi gli ObjectOutput???? ti consiglio di spostarti su ObjectOutputStream!!! stessa cosa per input!

    poi una cosa che mi è venuta in mente! dopo che fai le writeObject(), fai flush(); ???

    cmq cerca di dividerti le classi, non fare tutto in una! tipo è bello da vedere mettere tutte le tue funzioncine di read e write a parte cosi ti puoi benissimo gestire meglio le inizializzazioni! se vuoi ti sendo una classe che uso molto per queste cose e poi te la modifichi a tuo piacimento!!! ok?

    bhe ti saluto!! ciauz

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    13
    Originariamente inviato da madiron
    Allora a mio modo di vedere inizializzarli sempre è sbagliato ( puo portare problemi e non è neanche tanto bellino da vedere )
    e come posso fare allora per usarli senza inizializzarli sempre quindi senza usare il metodo cli.inizia?che mi consigli?perchè penso sia quello che da problemi..
    ho visto una cosa di strano! come mai usi gli ObjectOutput???? ti consiglio di spostarti su ObjectOutputStream!!! stessa cosa per input!
    non so la differenza tra i due..che differenza c'è?non mi ricordo, forse erano stati gli esercitatori a dirci cosi...se dici che è meglio provo a usare gli ObjectOutput/Input Stream...

    poi una cosa che mi è venuta in mente! dopo che fai le writeObject(), fai flush(); ???
    all'inizio l'avevo messa ma poi mi sembrava che mi aveva dato problemi e l'avevo tolta...dove devo metterla?prima di rifare una nuova write?

    cmq cerca di dividerti le classi, non fare tutto in una! tipo è bello da vedere mettere tutte le tue funzioncine di read e write a parte cosi ti puoi benissimo gestire meglio le inizializzazioni! se vuoi ti sendo una classe che uso molto per queste cose e poi te la modifichi a tuo piacimento!!! ok?

    bhe ti saluto!! ciauz
    ok prova a mandare..ma..in che senso?
    alla fine le write e le read ci sono solo tra client e server, che sono due classi distinte...e poi nelle swing li richiamiamo per associarli poi agli eventi..
    non so se vuoi ti faccio vedere il client e il server...boh cmq grazie mille

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    66
    ciao vale! allora ti ho inviato degli spezzoni di codice in pvt!

    cmq le flush() vanno fatte SEMPRE dopo la write()

    perche write() carica quello che gli passi sul socket, la flush() si occupa di mandare il camioncino caricato dal socket con la write() sul canale che collega client e server!!!

    ok?

    poi fammi sapere se hai problemi col codice!

    ciau

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.