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++; }

Rispondi quotando