Ragazzi In pratica vorrei che funzionasse Che inserisco tramite il primo thread i 3 campi di una persona e li invia al server , nel frattempo parte il 2 thread che aspetta e parte appena il primo finisce. Mi fa inserire altri 3 campi della persona e li invia al server.
Se io metto per la persona uno 3 campi fissi dal codice funziona la concorrenza mentre se lo metto con l'inserimento dei singoli campi tramite BufferedReader e quindi con readdLine accade questo:
I primi 3 valori della prima persona del primo thread me li fa inserire e il server li riceve , poi mi aspetterei che mi richiede altri 3 campi il secondo thread per poi inviare la seconda persona al server ma non accade questo.
Infatti appena il server riceve la prima persona dal lato client invece accade che il secondo thread parte e mi chiede di inserire solo un campo della seconda persona ma neanche il tempo di apparire il messaggio poi mi dice oggetto inviato , e il server riceve i 3 campi pero' inizializzati a default.
Io penso il problema si quindi nel BufferedReader , tramite il readLine. Ma non so come risolverlo.
Help Me Please ! [Non capisco perchè non posso allegare il .zip contenente tutti i file direttamente qui =( ] Quindi pubblico qui il codice:
Help Me pleAse !codice://CallMe.java import java.io.*; import java.net.*; public class CallMe { public synchronized void call () { try { Socket socket = new Socket("localhost",65535); Thread t = Thread.currentThread(); System.out.println("Sono il Thread: " + t.getId() + " Connessione Effettuata"); ObjectOutputStream OOS = new ObjectOutputStream (socket.getOutputStream()); Oggetto oggetto = new Oggetto(); OOS.writeObject(oggetto); System.out.println("Scrittura Oggetto Effettuata"); OOS.close(); } catch (UnknownHostException uhe) {} catch (IOException ioe) {} //catch (InterruptedException ie) {} } } -------------------------------------------------------------------------------------- Client.java import java.io.*; import java.net.*; public class Client implements Runnable { public CallMe target; public Client (CallMe t) { target = t; new Thread(this).start(); } public static void main (String args []) { CallMe target = new CallMe(); new Client(target);//Creo Primo Thread new Client(target);//Creo Secondo Thread } //chiude il main public void run () { synchronized (this) { this.target.call(); } } } ------------------------------------------------------------------------------------- Oggetto.java import java.io.*; import java.net.*; public class Oggetto implements Serializable { String nome; int eta; String cognome; public Oggetto () { try { BufferedReader BR = new BufferedReader ( new InputStreamReader (System.in) ); System.out.println("Inserisci Nome: "); nome=BR.readLine(); System.out.println("Inserisci Eta': "); eta=Integer.parseInt(BR.readLine()); System.out.println("Inserisci Cognome: "); cognome=BR.readLine(); BR.close(); } catch (IOException ioe) {} } public String toString () { String temp=""; temp+="Nome: " + nome; temp+=" Eta': "+ eta; temp+=" Cognome: "+ cognome; return temp; } } ---------------------------------------------------------------------------------- Server.java import java.net.*; import java.io.*; public class Server { public static void main (String args[]) { try { ServerSocket portaServer = new ServerSocket (65535); boolean continua = true; while (continua) { Socket socket = portaServer.accept(); //Connessione Accettata ObjectInputStream OIS = new ObjectInputStream (socket.getInputStream()); Oggetto oggetto = null; oggetto = (Oggetto)OIS.readObject(); System.out.println("Ho recuperato l'oggetto"); System.out.println(oggetto); OIS.close(); } } catch (IOException ioe) {} catch (ClassNotFoundException cnfe) {} } }![]()

Rispondi quotando
), e per il Client questo discorso che ho fatto dove invece di aprire più esecuzioni di un client da ogni terminale , creo un solo client che però manda più thread è sbagliato anche ?
