PDA

Visualizza la versione completa : [java] problemi comunicazione client server


feua
30-03-2005, 16:22
Salve a tutti. Sto realizzando a fini di studio una chat in java, ho scritto il client e il server in modo che si scambino messaggi da me definiti da una classe Messaggio nella quale metto tutte le info che mi servono



public class Messaggio implements Packet, Serializable{
private int tipo;
String contenuto;
String privato; // contiene nick client destinatario
String mittente; // contiene il nick mittente
/** Creates a new instance of Messaggio
prende in input solo il mittente*/
public Messaggio(String m) {
ecc
ecc


Per lo scambio di messaggi invece mi sono creato degli object i/o streams. Ecco la parte ad esempio del server



server = new ServerSocket( 5000, 100 );
Socket s1 = server.accept();
connection.getInetAddress().getHostName() );
input = new ObjectInputStream(
connection.getInputStream() );
output = new ObjectOutputStream( connection.getOutputStream() );
output.flush();
Messaggio s=new Messaggio("CHATSERVER",3,"Benvenuto,
inserisci il tuo nickname"); // invio richiesta login


I problemi sorgono quando invece che inviare una stringa (che ho provato viene scambiata senza problemi) invio sullo stream un messaggio


output.writeObject(s);
// s istanza di Messaggio

e quando leggo sul client
Messaggio m=(Messaggio)input.readObject();


Mi viene lanciata una ClassNotFoundException, e non riesco a capire perchè dato che la classe messaggio è implementata tale e quale sia nel server che nel client.
:messner: :master:
Grazie per il vostro aiuto in anticipo.

floyd
30-03-2005, 16:27
posta il nome package di Messaggio
:dottò:

dekdek
30-03-2005, 16:28
Mi viene lanciata una ClassNotFoundException, e non riesco a capire perchè dato che la classe messaggio è implementata tale e quale sia nel server che nel client.


In che senso?

feua
30-03-2005, 16:32
Il server e il client sono 2 applicazioni diverse, e ho fatto 2 package diversi.

Il package server si chiama chatServer (che fantasia!)
Il package client si chiama chatClient

La classe messaggio e l'interfaccia Packet sono presenti in entrambi i package. Ho fatto copiaincolla del file e cambiato la riga package.

floyd
30-03-2005, 16:37
in pratica cerchi di castare un oggetto della classe com.ciccio.Messaggio in una classe com.trippone.Messaggio
e direi che dice class cast exc :biifu:
fai un com.util.Messaggio che faccia parte del server e del client

dekdek
30-03-2005, 16:41
Quanto meno dovrebbero condividere l'interfaccia della classe se non vuoi che l'implementazione sia comune. :ciauz:

feua
30-03-2005, 16:43
Originariamente inviato da floyd
in pratica cerchi di castare un oggetto della classe com.ciccio.Messaggio in una classe com.trippone.Messaggio
e direi che dice class cast exc :biifu:
fai un com.util.Messaggio che faccia parte del server e del client

Ottimo, se ho ben capito devo far appartenere lo stesso file ad entrambi i package e caricarlo tramite import.
Come si fa? :) In che modo va dichiarata una classe così? Non l'ho mai fatto.

dekdek
30-03-2005, 16:49
La soluzione migliore sta nel creare un terzo package di supporto ai due applicativi. (Meglio)
O usare un unico package per server e client.
O inserire la classe solo nel package del client e fare in modo che il server la richiami da li'. O viceversa. (Peggio)

floyd
30-03-2005, 16:52
dico che devi fare una classe che appartiene a un package che vuoi e poi la metti sia nel client che nel server
in pratica
client.jar:
com.client.A
com.client.B
com.client.C
com.util.Messaggio
server.jar:
com.server.D
com.server.E
com.server.F
com.util.Messaggio
chiaro? :fighet:

feua
30-03-2005, 16:52
Praticamente? come faccio a far vedere al programma delle classi che non sono nel suo package?

Se ho capito bene:

Messaggio appartiene al package che voglio.

chatServer.java

package chatserver;
import com.util.Messaggio;

? così?

Loading