求助:Socket传输Object类型时,出现ClassNotFound异常

chaowangf 2011-07-01 04:47:20
我要实现的功能是:客户端向服务器发送一个Employee对象,服务器接收后打印出Employee对象信息,同时服务器也创建一个Employee对象返回给客户端,客户端也打印出相应信息。


调试的时候,会在客户端抓到ClassNotFoundException


Employee类:
public class Employee implements Serializable{
/**
*
*/
private static final long serialVersionUID = 2956605195507987353L;
private int employeeNumber;
private String employeeName;

public Employee(int i ,String b){
employeeNumber = i;
employeeName = b;
}

public int getEmployeeNumber() {
return employeeNumber;
}

public void setEmployeeNumber(int employeeNumber) {
this.employeeNumber = employeeNumber;
}

public String getEmployeeName() {
return employeeName;
}

public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
}




服务器类:
public class Server {
private static final int port = 1234;

ServerSocket server ;

Socket socket_obj ;

ObjectInputStream input;

ObjectOutputStream output;


public void getMessage() throws IOException, ClassNotFoundException{
server = new ServerSocket(Server.port);
socket_obj = server.accept();

ObjectOutputStream out = new ObjectOutputStream(socket_obj.getOutputStream());
ObjectInputStream in = new ObjectInputStream(socket_obj.getInputStream());
/**获取信息*/
Employee recieve = (Employee) in.readObject();
System.out.println(recieve.getEmployeeName());
System.out.println(recieve.getEmployeeNumber());

/**返回信息*/
Employee back = new Employee(123, "fuyun");
out.writeObject(back);

out.flush();
in.close();
out.close();
socket_obj.close();
server.close();
}

public static void main(String[] args) {
try {
new Server().getMessage();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}



客户端类:
public class Client {

private static final int port = 1234;

Socket socket_obj ;

ObjectInputStream input;

ObjectOutputStream output;


public void getMessage() throws IOException, ClassNotFoundException{
socket_obj = new Socket(InetAddress.getLocalHost(),Client.port);

ObjectOutputStream out = new ObjectOutputStream(socket_obj.getOutputStream());
ObjectInputStream in = new ObjectInputStream(socket_obj.getInputStream());

/**发送信息*/
Employee back = new Employee(465, "shenma");
out.writeObject(back);

/**获取信息*/
Employee recieve = (Employee) in.readObject();
System.out.println(recieve.getEmployeeName());
System.out.println(recieve.getEmployeeNumber());

in.close();
out.close();
socket_obj.close();
}

public static void main(String[] args) throws IOException, ClassNotFoundException {
new Client().getMessage();
}

...全文
287 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
matana 2012-09-04
  • 打赏
  • 举报
回复
怎么解决的啊!我现在也遇到这个问题。。。急啊急啊
welldoneAAA 2011-08-23
  • 打赏
  • 举报
回复
喂~楼猪啊 你的问题是什么啊 截个图啊 再说下如何解读的阿
linzhiwei_yahoo 2011-08-17
  • 打赏
  • 举报
回复
找到问题也不把原因贴出来???还指望以后再问别人吗???
chaowangf 2011-07-04
  • 打赏
  • 举报
回复
已经找到问题了。
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧