在实现Serializable时收到错误java.lang.ClassNotFoundException

时间:2018-04-20 01:24:49

标签: java

我正在编写一个关于通过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)

1 个答案:

答案 0 :(得分:0)

您正在序列化client.obinna对象并尝试将其反序列化为obinnas对象,无论在哪个包obinnas中定义。

这不起作用。

一个obinna对象,即使解决了底层问题,尝试将其强制转换为另一个类也会失败,即异常中提到的类不可用反序列化时在CLASSPATH上。

你不能这样做。您必须在同一个包中的两端使用相同名称的同一个类。