J'ai deux classes X et Y, comme celui-ci:problème de sérialisation Java
class X implements Serializable
{
int val1;
Y val2;
}
class Y implements Serializable
{
int val;
}
Je veux transmettre un objet de type X à partir d'un client au serveur, mais je ne peux pas parce que la classe X a un champ de type Y. J'ai remplacé le champ de type Y par un champ de type X dans la classe X et cela fonctionne.
EDIT Ce sont mes classes:
class Y implements Serializable
{
int val;
Y()
{
val = 3;
}
}
class X implements Serializable
{
int val;
Y ob;
X(int i, Y o)
{
val = i;
ob = o;
}
}
public class Server
{
public static void main(String[] s)
{
ServerSocket ss = null;
Socket cs = null;
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
try
{
ss = new ServerSocket(1234);
System.out.println("Server pornit!");
cs = ss.accept();
oos = new ObjectOutputStream(cs.getOutputStream());
ois = new ObjectInputStream(cs.getInputStream());
}
catch(Exception e)
{
System.out.println("Exceptie!");
}
System.out.println("Asteapta mesaj...");
X x;
try
{
x = (X) ois.readObject();
System.out.println(x.val);
}
catch(Exception e)
{
System.out.println(e.toString());
}
try
{
ss.close();
cs.close();
}
catch(Exception e)
{
}
}
}
public class Client
{
public static void main(String[] s)
{
Socket cs;
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
System.out.println("Connect...");
try
{
cs = new Socket("127.0.0.1",1234);
oos = new ObjectOutputStream(cs.getOutputStream());
ois = new ObjectInputStream(cs.getInputStream());
}
catch(Exception e)
{
System.out.println("Exceptie!");
}
try
{
oos.writeObject(new X(8,new Y()));
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
Utilisez-vous ObjectOutputStream et ObjectInputStream? Quel genre d'erreurs voyez-vous? Si vous utilisez 2 processus: Êtes-vous sûr de fournir la même version des classes compilées aux deux? –
Que diriez-vous du code de sérialisation? Empiler des traces? Vous ne pouvez pas transmettre une instance 'X'? Pourquoi pas? Qu'est-ce qui se passe quand vous essayez? Quand vous changez «Y» en «X» et «ça marche», qu'est-ce que cela signifie exactement? – erickson
Oui j'utilise ObjectOutputStream et ObjectInputStream et oui les mêmes classes sont dans le client et le serveur. L'exception est renvoyée dans le serveur lors de la réception de l'objet de type X. L'exception est la suivante: "java.net.SocketException: Connection reset" – Stefan