// ----------------- 服务器端 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对象时,转化发生异常,不能理解!!! 请各位大侠帮忙解决!!!
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对象时,转化发生异常,不能理解!!! 请各位大侠帮忙解决!!!
另外,serialVersionUID要相同,你最好在User中定义一个serialVersionUID字段,此值两边定义成一样的。看上面的例子,好像是你定义的两个USer对象的类型不一样吧。报的错误是类名找不到
private static final long serialVersionUID = 1L ;我改了,运行了好几遍,还是不能解决问题,一样的异常产生。