Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    applicazione client server

    salve ragazzi, ho un problema con un applicazione client-server in cui devo mandare attraverso il client un oggetto da memorizzare e dall'altra parte il server deve salvare su apposita struttura dati. si possono fare anche altre operazioni come modifica o eliminazione purchè l'utente conservi l'id che viene usato come chiave per la hashmap.
    ho un problema per quanto riguarda la scrittura e lettura con objectstream. ho implementato l'interfaccia serializable sulla classe da cui istanzio l'oggetto viaggiante. non riesco a capire perchè non funziona niente... potete aiutarmi? se vi serve dell'altro codice per capire cosa fa l'applicazione ve lo posto... grazie anticipatamente.
    vi ho postato solamente l'inserimento...

    applicazione client

    import java.io.*;
    import java.net.*;

    codice:
    public class Website{
    
    	Socket s ;	
    	private String indirizzo;
    	private int porta; 
    	ObjectOutputStream os;
    	ObjectInputStream is;
    	
    	public Website(String indirizzo,int porta){
    	this.porta=porta;
    	this.indirizzo=indirizzo;
    	}
    	
    	public int registraViaggio(Viaggiante v)
    	{
    		int id=-1;
    		try{
    			Socket s = new Socket(indirizzo,porta);
    			is  = new ObjectInputStream( s.getInputStream() );
    			os  = new ObjectOutputStream( s.getOutputStream() );
    
    
    			os.writeInt(1);			// 1 indica che voglio fare un inserimento
    			os.flush();
    			os.writeObject(v);				//SI BLOCCA QUI
    			System.out.println("ho scritto");
    			os.flush();
    			
    			id=is.readInt();
    			s.close();
    			is.close();
    			s.close();
    		}catch(Exception e){
    			System.err.println("errore");
    		}
    		return(id);    //l'utente dovra memorizzarlo in caso di modifica o cancellazione del viaggio
    
    	}
    
    APPLICAZIONE SERVER:
    
    import java.util.*;
    import java.io.*;
    import java.net.*;
    import java.util.concurrent.*;
    
    public class Servitore implements Runnable{
    	
    	ServerSocket ss;
    	Socket s;
    	private String indirizzo;
    	private int porta; 
    	private int scelta;
    	private static Integer id = new Integer(0);
    	ObjectInputStream  is;
    	ObjectOutputStream os;
    	ConcurrentHashMap<Integer,Viaggiante> map = new ConcurrentHashMap<Integer,Viaggiante>();
    	
    	public Servitore(int porta){
    	this.porta=porta;
    	}
    	
    	public void run()
    	{
    		try{
    			ss = new ServerSocket(porta);
    
    			while(true)
    			{
    				s=ss.accept();
    				os = new ObjectOutputStream(s.getOutputStream());
    				is = new ObjectInputStream(s.getInputStream());
    
    				scelta=is.readInt();
    				if(scelta==1)
    				{
    					System.out.println(1);
    					registraViaggio();
    				}
    					
    				else if(scelta==2)
    					modifica();
    				
    				else 
    					elimina();
    				s.close();
    				is.close();
    				os.close();
    			}
    		}catch(Exception e){
    			System.err.println("errore di comunicazione");
    		}
    			
    	}
    	
    	private void registraViaggio() throws Exception
    	{
    		Viaggiante v;
    		v=(Viaggiante)is.readObject();		//si blocca qui si blocca
    		map.put(id,v);
    		os.writeInt(id.intValue());
    		id++;
    	}

  2. #2
    Prova a postare anche il codice di Viaggiante, penso che il problema è lì

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: applicazione client server

    Originariamente inviato da peppe89kl
    ho implementato l'interfaccia serializable sulla classe da cui istanzio l'oggetto viaggiante. non riesco a capire perchè non funziona niente... potete aiutarmi? se vi serve dell'altro codice per capire cosa fa l'applicazione ve lo posto... grazie anticipatamente.
    vi ho postato solamente l'inserimento...
    cosa non funziona in dettaglio? hai messo un commento con si blocca qui, ma il blocco tira fuori un'eccezione? Se si quale? Se no leggi le API sugli objectoutputstream e sulle applicazioni client/server.
    Capire cosa non va ad occhio e croce significa metterci tutti ad eseguire il tuo codice (che oltretutto manca di pezzi)

  4. #4
    ecco la classe viaggiante... e cmq il problema è proprio sul comando writeobject ereadobject genera un IOException

    codice:
    import java.io.*;
    
    public class Viaggiante implements Serializable{
    	 private Anagrafica a;
    	 private Reperibilita r;
    	 private Destinazione d;
    	 private Viaggio v;
    	private String tipologia;
    	
    	public Viaggiante() {
    		a = new Anagrafica();
    		r = new Reperibilita();
    		d = new Destinazione();
    		v = new Viaggio();
    	}
    	
    	public Anagrafica getAnagrafica(){
    		return a;
    	}
    	public Reperibilita getReperibilita(){
    		return r;
    	}
    	public Destinazione getDestinazione(){
    		return d;
    	}
    	public Viaggio getViaggio(){
    		return v;
    	}
    	
    	public void setTipologia (String tipologia)
    	{
    		this.tipologia=tipologia;
    	}
    	
    	public String getTipologia()
    	{
    		return tipologia;
    	}
    	
    	public String toString()
    	{
    		return( a.toString() + r.toString() + d.toString() + v.toString() + "tipologia: " + tipologia);
    	}
    }

  5. #5
    codice:
    	 private Anagrafica a;
    	 private Reperibilita r;
    	 private Destinazione d;
    	 private Viaggio v;
    Assicurati che anche questi oggetti, dichiarati come proprietà della classe viaggiante, siano serializzabili. Il problema è al 100% dato da questo.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da francesco.muia
    Assicurati che anche questi oggetti, dichiarati come proprietà della classe viaggiante, siano serializzabili. Il problema è al 100% dato da questo.
    Concordo in pieno.
    senza trace inoltre non possiamo dirti molto (IOException con i socket è dire tutto e dire niente).
    Un consiglio: dai nomi significativi alle variabili, sole lettere (tipo "a") venivano usate una volta per risparmiare caratteri, ma davano grossi mal di testa in fase di manutenzione. Visto che almeno su questo non bisogna risparmiare (rep al posto di "r" è un tantinello più significativo) diamo nomi validi

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.