Salve a tutti
avrei il seguente problema sulla deserializzazione di un oggetto inviato sulla rete tramite UDP.
la riga di codice che dovrebbe ricostruire l'oggetto "prova=(persona)ois.readObject();" mi dà un eccezione del tipo ClassCastException.
posto qui di seguito il codice del lato server (quello che mi dà l'eccezione):
codice:
import java.io.*;
import java.net.*;
public class UDPreceiver
{
public class persona implements Serializable
{
private static final long serialVersionID=1L;
private String nome;
private String cognome;
private int eta;
public persona(String nome, String cognome, int Persona)
{
this.nome=nome;
this.cognome=cognome;
eta=Persona;
}
String getNome()
{
return nome;
}
String getCognome()
{
return cognome;
}
int getEta()
{
return eta;
}
}
public static void main(String args[]) throws ClassNotFoundException, IOException
{
if(args.length!=1) throw new IOException("Uso: UDPReceiver <port>");
byte buffer[] = new byte[65536];
DatagramSocket dsocket = new DatagramSocket(Integer.parseInt(args[0]));
DatagramPacket dpacket;
while(true)
{
System.out.println("In attesa di messaggi.....");
dpacket = new DatagramPacket(buffer, buffer.length);
dsocket.receive(dpacket);
persona prova=null;
System.out.println("Ricevuto messaggio");
System.out.println("Mittente: " + dpacket.getAddress());
System.out.println("Porta: " + dpacket.getPort());
System.out.println("Lunghezza messaggio: " + dpacket.getLength());
ByteArrayInputStream biStream = new ByteArrayInputStream(dpacket.getData());
ObjectInputStream ois=new ObjectInputStream(biStream);
prova=(persona)ois.readObject();
System.out.println(prova.nome);
}
}
}
Per ulteriore chiarezza posto anche il lato client che serializza l'oggetto da inviare:
codice:
import java.io.*;
import java.net.*;
import java.util.*;
public class UDPsender
{
public static class persona implements Serializable
{
private static final long serialVersionID=1L;
private String nome;
private String cognome;
private int eta;
public persona(String nome, String cognome, int Persona)
{
this.nome=nome;
this.cognome=cognome;
eta=Persona;
}
String getNome()
{
return nome;
}
String getCognome()
{
return cognome;
}
int getEta()
{
return eta;
}
}
static protected DatagramPacket buildPacket(String host, int port, persona studente) throws IOException
{
InetAddress address=InetAddress.getByName(host);
ByteArrayOutputStream bout=new ByteArrayOutputStream();
byte[] data=new byte[256];
DatagramPacket dp=new DatagramPacket(data,data.length,address,port);
ObjectOutputStream dout=new ObjectOutputStream(bout);
dout.writeObject(studente);
dout.flush();
data=bout.toByteArray();
dp.setData(data);
dp.setLength(data.length);
bout.reset();
return dp;
}
public static void main(String [] args) throws IOException
{
if(args.length<5) throw new IOException("Uso: UDPSender <host> <port> <nome> <cognome> <età>");
DatagramSocket dsocket = new DatagramSocket();
DatagramPacket dpacket;
persona studente=new persona(args[2],args[3],Integer.parseInt(args[4]));
dpacket = buildPacket(args[0], Integer.parseInt(args[1]),studente);
dsocket.send(dpacket);
System.out.println("Messaggio spedito");
}
}
Grazie a tutti!!!!!!!