我正在编写一个关于通过UDP网络发送可序列化数据的程序,它会在服务器上引发错误。当我在服务器上调用这个特定的行obinnas ok =(obinnas)In.readObject();时出现错误。以下是我的计划。
服务器代码
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket(7000);
socket.setSoTimeout(0);
while (true) {
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
ByteArrayInputStream buffers = new ByteArrayInputStream(buffer);
ObjectInputStream In = new ObjectInputStream(buffers);
obinnas ok = (obinnas)In.readObject();
String message = new String(buffer);
ok.print();
}
} catch (Exception error) {
error.printStackTrace();
}
}
服务器上的Obinnas类
public class obinnas implements Serializable{
private static final long serialVersionUID = -4507489610617393544L;
String name;
int data;
public void print(){
System.out.println(name +": "+data);
}
}
客户代码
public static void main(String[] args) {
try{
String host = "localhost";
InetAddress addr = InetAddress.getByName(host);
obinna Details = new obinna("Jay", 1);
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream In = new ObjectOutputStream(buffer);
In.writeObject(Details);
In.flush();
byte[] Buf= buffer.toByteArray();
DatagramPacket packet = new DatagramPacket(Buf, Buf.length, addr, 7000);
DatagramSocket socket = new DatagramSocket(4000);
socket.send(packet);
}
catch (Exception error){
error.printStackTrace();
}
}
我得到的错误信息在
之下java.lang.ClassNotFoundException: client.obinna
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:682)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1859)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1745)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2033)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:427)
at server.Server.main(Server.java:28)
答案 0 :(得分:0)
您正在序列化client.obinna
对象并尝试将其反序列化为obinnas
对象,无论在哪个包obinnas
中定义。
这不起作用。
它是一个obinna
对象,即使解决了底层问题,尝试将其强制转换为另一个类也会失败,即异常中提到的类不可用反序列化时在CLASSPATH上。
你不能这样做。您必须在同一个包中的两端使用相同名称的同一个类。