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