在客户端和服务器类中,我都有一个名为Data的完全相同的内部类。使用以下命令从服务器发送此Data对象:
ObjectOutputStream output= new ObjectOutputStream(socket.getOutputStream());
output.writeObject(d);
(其中d是数据对象)
在客户端接收此对象并强制转换为Data对象:
ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
Object receiveObject = input.readObject();
if (receiveObject instanceof Data){
Data receiveData = (Data) receiveObject;
// some code here...
}
我在这一行java.lang.ClassNotFoundException: TCPServer$Data
Object receiveObject = input.readObject();
我的猜测是它试图在服务器端寻找Data类而无法找到它,但我不确定......我该如何解决这个问题?
答案 0 :(得分:7)
您尝试做的事情如下:
class TCPServer {
/* some code */
class Data {
}
}
class TCPClient {
/* some code */
class Data {
}
}
然后,您正在序列化TCPServer $ Data并尝试将其反序列化为TCPClient $ Data。相反,你会想要这样做:
class TCPServer {
/* some code */
}
class TCPClient {
/* some code */
}
class Data {
/* some code */
}
然后确保Data类可用于客户端和服务器程序。
答案 1 :(得分:3)
当您在两个不同的JVM中使用某个类,并且您正在编组/解组该类时,该类应该导出到公共库并在服务器和客户端之间共享。不同的班级不会随时工作。
您要做的是将TCPServer $ Data和unmarshall编组为TCPClient $ Data。这是不相容的。