Newsgroup: it.comp.java
Titolo: Problemi riguardo ObjectInputStream!

Ciao ragazzi!
Sono un principiante, e per allenarmi ed imparare sto cercando di 
programmare una sorta di chat (client/server).
Ho dei problemi perň con il metodo ObjectInputStream, non capisco 
come funziona bene cioč... teoricamente avrei anche capito, ma mi da 
spesso errori:
-A volte quando lo utilizzo mi blocca l'esecuzione del programma 
senza dare alcun errore (non so se ho capito bene ma fa cosě quando 
apro un ObjectInputStream e dall'altra parte non hanno spedito 
niente)(E' una mia supposizione, gradirei se qualcuno mi confermasse 
o mi dicesse come funziona)
-Altre volte mi da IOException apparentemente senza motivo...
Per esempio vi riassumo brevemente il mio problema:
L'errore mi si presenta nell'applicazione "Server":
-Il client si collega ad un serversocket il quale restituisce un
socket al 
server.
-il server prende ObjectInputStream dal flusso e riceve un oggetto con
le informazioni per il login.
-Dopodichč apro un thread che ha come variabili globali il socket 
dell'utente appena connesso e una lista di tutti gli utenti.
(Questo thread servirebbe per ricevere i messaggi dei singoli utenti e
spedirli a tutti gli altri).
Bene ora c'č il vero problema: il thread ha il socket dell'utente
appena 
connesso, prende l'ObjectOutputStream tranquillamente, ma quando 
prende l'ObjectInputStream (ObjectInputStream nome = new 
ObjectInputStream(socket.getInputStream()); ) mi da un IOException!
Non so se mi sono spiegato... speriamo di si...
Qualcuno sa aiutarmi?! Ne sarei grato in eterno, perchč č da un po' di
tempo che sto cercando di capire cosa non va ma soprattutto non 
capisco come funzioni esattamente ObjectInputStream e quando dia 
errore.
PS: Ho provato a cercare documentazione riguardo il mio problema 
ma non ne ho trovata... qualcuno sa darmi qualche dritta?!
Grazie mille!

Ragazzi vi prego aiutatemi... vi posto il codice così magari qualche
buona anima mi aiuta!
Questo è il codice della classe server:
import java.io.*;
import java.net.*;
import java.util.ArrayList;
public class Server
{
	private ArrayList ListaUtenti;
	private Messaggio MsgRcv;
	private ServerSocket server;
	private Socket s;
	//
	//Thread provathread;
 
	public Server()
	{
		ListaUtenti = new ArrayList();
		MsgRcv = null;
		server = null;
		s = null;
	}
 
	public Server(ServerSocket x)
	{
		ListaUtenti = new ArrayList();
		MsgRcv = null;
		server = x;
		s = null;
	}
 
	public void azione()
	{
 
		try
		{
			server = new ServerSocket(1500);
		}
		catch(IOException e)
		{
			System.out.println("Porta già utilizzata");
			System.exit(0);
		}
 
		while(true)
		{
			try
			{
				System.out.println("Attendo
Connessioni");
				s = server.accept();
				System.out.println("Connessione
Avvenuta");
 
				ObjectInputStream temp = new
ObjectInputStream(s.getInputStream());
 
				String nome = null;
				try
				{
					nome =
(String)temp.readObject();
 
				}
				catch(ClassNotFoundException e)
				{
System.out.println("ClassNotFound");
					System.exit(0);
				}
 
 
 
				System.out.println("OU!");
 
				Utente nuovo = new Utente(nome,s);
 
				System.out.println("Hey, qui arrivo o
no?");   //
 
				ListaUtenti.add(nuovo);
				System.out.println("Utente Aggiunto
nell'arraylist");
 
				Thread provathread = new Thread(new
Sinvia(ListaUtenti,nuovo));
				provathread.start();
				//
 
			}
			catch(IOException e)
			{
				System.out.println("Un' IOException in
mezzo");
				System.exit(0);
			}
		}
 
 
	}
 
	public static void main(String[] args)
	{
		Server nuovo = new Server();
		nuovo.azione();
	}
 
}
===============================================================
Questo invece è il codice di Sinvia, la classe che in realtà da dei
problemi:
import java.io.*;
import java.net.*;
import java.util.ArrayList;
public class Sinvia implements Runnable
{
	ArrayList ListaUtenti;
	Utente Questo;
	ObjectInputStream InStream;
	ObjectOutputStream OutStream;
	Messaggio temp;
 
	public Sinvia()
	{
		ListaUtenti = null;
	}
 
	public Sinvia(ArrayList x, Utente y)
	{
		ListaUtenti = x;
		Questo = y;
		try
		{
			InStream = new
ObjectInputStream(y.retSock().getInputStream());
			OutStream = new
ObjectOutputStream(y.retSock().getOutputStream());		
		}
		catch(IOException e)
		{
			System.out.println("Errore nel prendere i
flussi in Sinvia nel metodo costruttore");
			System.exit(0);
		}
		temp = null;
	}
 
 
 
	public void run()
	{
 
 
	/*try
	{
 
 
		OutStream = new
ObjectOutputStream(Questo.retSock().getOutputStream());
 
		System.out.println("qui arrivo");
		InStream = new
ObjectInputStream(Questo.retSock().getInputStream());
 
 
		System.out.println("Qui no");
	}
	catch(IOException e)
	{
		System.out.println("IOException nella presa dei flussi
in Sinvia");
		System.exit(0);
	}
	*/
 
	while(true)
	{
		try
		{
			System.out.println("dal thread: aspetto un
messaggio");
			temp = (Messaggio)InStream.readObject();
		}
 
		catch(IOException e)
		{
			System.out.println("IOException");
			System.exit(0);
		}
		catch(ClassNotFoundException e)
		{
			System.out.println("ClassNotFoundException in
Sinvia.java");
			System.exit(0);
		}
 
		try
		{
		Thread.sleep(10000);
		}
		catch(InterruptedException e)
		{
			System.out.println("InterruptedException");
		}
 
 
		for(int k=0; k <= ListaUtenti.size(); k++)
		{
			Utente temp2 = (Utente)ListaUtenti.get(k);
 
			ObjectOutputStream marso =
temp2.retOutStream();
 
			try
			{
				marso.writeObject(temp);
			}
			catch(IOException e)
			{
				System.out.println("IOException in
Sinvia quando cerco di spedire il messaggio");
				System.exit(0);
			}
		}
	}
 
 
 
	}
 
 
}
AIUTO!:D
Grazie ciao ciao!:D

L'errore si presenta in questo costruttore... mi lancio L'IOException!


 > System.exit(0);
ciao,
prova a fare cosi tanto per cominciare: Al System.out.println dagli come
parametro e.getMessage().toString() per vedere cosa ti dice l'eccezione.
Dopo metti un System.out.println per ogni riga nel try. Cioé, fa in modo di
isolare l'errore!
try{
System.out.println("rigo 1");
InStream = new ObjectInputStream(y.retSock().getInputStream());
System.out.println("rigo 2");
OutStream = new ObjectOutputStream(y.retSock().getOutputStream());
System.out.println("rigo 3");
}
Isola l'errore, e concentrati solo su quello. Dammi retta, é il modo
migliore per imparare.
\Alf

grazie mille alf! proseguirň alla ricerca dell'errore nel modo che mi
hai suggerito...
Cmq il problema avviene quando cerca di prendere il flusso di input:
sta ad aspettare un po' (Come se non ci fosse ObjectOutputStream
dall'altra parte, cosa che c'č) e al primo oggetto che arriva al
server prosegue con l'esecuzione e mi lancia un IOException con
messaggio invalid stream header!!!
Grazie mille per l'aiuto!
ora vedo di risolvere questo problema!

 ha scritto nel messaggio
news:qmr4hv8st6ausm974...@4ax.com...
