在客户机类和服务器类中,我都有一个完全相同的内部类,称为Data。此数据对象是使用以下命令从服务器发送的:
ObjectOutputStream output= new ObjectOutputStream(socket.getOutputStream());
output.writeObject(d);(其中d是数据对象)
此对象在客户端接收,并转换为数据对象:
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();
我的猜测是,它试图在服务器端查找数据类,但找不到,但我不确定……我该如何解决这个问题?
发布于 2012-08-01 01:59:47
您尝试做的事情是类似于以下内容的:
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 */
}然后确保数据类对客户端和服务器程序都可用。
发布于 2012-08-01 01:49:54
当您在两个不同的JVM中使用某个类,并且您正在编组/解组该类时,应该将该类导出到一个公共库中,并在服务器和客户端之间进行共享。有不同的类在任何时候都不会起作用。
您要做的是将TCPServer$Data编组并解组为TCPClient$Data。这是不兼容的。
https://stackoverflow.com/questions/11745771
复制相似问题