// ----------------- 服务器端 TestServerObjeectTrans 类用于接受客户端传送过来的对象User,然后打印输出 -------package com.test.server;import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TestServerObjeectTrans {

public TestServerObjeectTrans(){
try {
System.out.println("服务器端正在监听 9999") ;
ServerSocket server = new ServerSocket(9999) ;
Socket client = server.accept() ;
ObjectInputStream ois = new ObjectInputStream(client.getInputStream()) ;
System.out.println(ois) ;
User user = (User)ois.readObject() ;  // 运行此处发生类型转换异常
System.out.println("从客户端接受过来的USER对象:" + user.getUser() + " , " + user.getPass()) ;
client.close() ;
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new TestServerObjeectTrans() ;
}}// 服务器端 User 对象
package com.test.server;import java.io.Serializable;public class User implements Serializable {


private String user ;
private String pass ;

public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}

}// ----------------- 客户端 TestClientObjectTrans类用于给服务器端传送User对象  -------package cn.lxzp.turn;import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class TestClientObjectTrans {


public TestClientObjectTrans(){
try {
Socket client = new Socket("127.0.0.1" , 9999) ;
ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream()) ;
User user = new User() ;
user.setUser("admin") ;
user.setPass("admin") ;
out.writeObject(user) ;
client.close() ;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

public static void main(String[] args) {
new TestClientObjectTrans() ;
}}// 客户端User对象
package cn.lxzp.turn;import java.io.Serializable;public class User implements Serializable{


private String user ;
private String pass ;

public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}

}服务器端监听 ,等待客户端连接,传送User 对象!
首先服务器端运行,然后客户端运行。运行异常:服务器端正在监听 9999  // 此句打印出来了。
java.io.ObjectInputStream@c21495
java.lang.ClassNotFoundException: cn.lxzp.turn.User   // 转换异常从运行结果可以看出来是 类转换异常,服务器和客户端都定义了相同的User 对象,而且已经都序列化了,但是服务器端通过对象流介绍客户端发送过来的User对象时,转化发生异常,不能理解!!!  请各位大侠帮忙解决!!!
 

解决方案 »

  1.   

    User对象相同,包括类名要相同,包名要相同,就是说签名要相同。
    另外,serialVersionUID要相同,你最好在User中定义一个serialVersionUID字段,此值两边定义成一样的。看上面的例子,好像是你定义的两个USer对象的类型不一样吧。报的错误是类名找不到
      

  2.   

    我是将客户端接受过来的cn.lxzp.turn.User 对象 强转换为com.test.server.User对象再通过com.test.server.User 定义的对象接受。你的意思是在服务器端和客户端定义的两个USer对象中加入定义一个serialVersionUID字段,是服务器端与客户端的User对象一致,是吧?定义如下
    private static final long serialVersionUID = 1L ;我改了,运行了好几遍,还是不能解决问题,一样的异常产生。