使用ClassNotFoundException通过TCP接收用户定义的Object

时间:2015-11-09 18:06:00

标签: java tcp

我正在开发一个使用TCP连接的客户端/服务器应用程序。我需要从服务器向客户端发送用户定义的对象。一切正常,直到客户端收到对象,它抛出ClassNotFoundException,即使该类是双方并且我投了它,它是Serializable。

客户端的例外是:

     Exception in thread "main" java.lang.ClassNotFoundException: jggserver.Question

我不知道为什么客户端使用服务器包进行转换。 (他们是不同的项目)。

这是客户端的代码,其中例外是:

    q = (Question) clientInputStream.readObject();
服务器端的

代码:

    serverOutputStream.writeObject(question);

虽然我经历了几个教程并且他们做了确切的事情。

我感谢任何帮助。

评论:

user1697575,两个程序都在同一台计算机上,同一个IDE(netbeans)。

  • 我不知道TCP有效负载,我会搜索它。

  • 我在服务器上创建了类,然后在客户端重构它,我不知道它是否正确。

  • 我无法使用RMI,因为我被要求专门使用这种方式来实现我的项目。

非常感谢。

解决:我创建了一个单独的包并向其添加了Question类,然后我将此包包含在服务器和客户端程序中。

谢谢所有人,特别是胡安。

3 个答案:

答案 0 :(得分:1)

我认为答案就在你的问题中,这里"我不知道客户端使用服务器包进行投射的原因。 (他们是不同的项目)。"

如果服务器和客户端上的软件包不同,则标准序列化系统无法正常工作。

您需要创建一个存在的类,这两个项目具有相同的名称和包,真的是#34;相同的代码"。

答案 1 :(得分:0)

需要考虑许多检查点:

  • 客户端和服务器上的JVM版本
  • TCP字节有效负载检查以查看它们是否未被损坏/翻译
  • 在客户端和服务器上加载的类版本

出于好奇,你为什么不使用一个强大的RMI标准框架来处理很多事情呢?

答案 2 :(得分:0)

双方都有。那个异常告诉你的是什么。它必须是同一个包中的相同类名。