[英]cast error when inflating a serialized object on server side
我正在嘗試通過套接字將客戶端的序列化Java對象從服務器發送到服務器,但是服務器端存在強制轉換錯誤,我不知道為什么。 下面是要序列化的類。 (我正在使用Eclipse,並且該類在客戶端軟件包和服務器軟件包中。)
package client; //it is "package server;" on server side
import java.io.Serializable;
public class Simple implements Serializable {
public String msg;
public Simple(){
msg = "simple";
}
}
在客戶端,我做到了:
Simple obj = new Simple();
Socket socket = new Socket(hostname, portNum);
ObjectOutputStream objOut = new ObjectOutputStream(socket.getOutputStream());
objOut.writeObject(obj);
objOut.flush();
objOut.close();
在服務器端,我做到了:
//already accepted clientSocket
ObjectInputStream objIn = new ObjectInputStream(clientSocket.getInputStream());
Simple anObj = (Simple) objIn.readObject();
System.out.println("from server: " + anObj.msg);
objIn.close();
clientSocket.close();
但是,我得到了錯誤:
Exception in thread "main" java.lang.ClassCastException: client.Simple cannot be cast to server.Simple at server.Server.main
我在單個程序包中對服務器和客戶端進行了類似的嘗試,並且序列化和通貨膨脹均有效。 如果您能幫助我找出為什么它在這里不起作用,我將不勝感激。
//它是“打包服務器;” 在服務器端那么,您有兩個不同的Simple類嗎? 我的意思是,您是否在兩個不同的包下兩次聲明了“簡單”類,所以它們是不同的並且不能成為貓。 只有一堂課。 您可以使用本教程 。
簡單的說; 為了避免不同名稱空間中的兩種類型發生沖突, 包名稱是類型名稱的一部分 。
發生的是,客戶端對client.Simple
進行了序列化,服務器也將其反序列化為client.Simple
。 然后,將其強制轉換為完全不同的類型server.Simple
。
可以通過執行來顯示;
ObjectInputStream objIn = new ObjectInputStream(clientSocket.getInputStream());
Object anObj = objIn.readObject();
System.out.println(anObj); // Output "client.Simple@39617189"
obj = (server.Simple)anObj; // Throws ClassCastException
代碼顯示服務器知道反序列化對象的類型是client.Simple
,並且根本無法將其server.Simple
轉換為單獨的類型server.Simple
。
class client.simple
class server.simple
client.simple
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.