簡體   English   中英

使用Java通過網絡發送對象

[英]Sending an Object over a network using Java

我正在嘗試通過物理網絡(而不是通過本地主機)在Java中發送對象,但看來我有問題。

對象的接口(客戶端和服務器具有此接口):

public interface distributable extends Serializable {

      public void test();
}

我嘗試發送的對象(僅服務器具有此對象):

class ObjectToSend implements distributable {

       public ObjectToSend() {
       }

       public void test() {
            system.out.println("worked!");
       } 
}

服務器:

private ObjectToSend obj = new ObjectToSend();

obj_out_stream.writeObject(obj);
obj_out_stream.flush();

客戶:

private distributable ReceivedObj = null;

try {
       ReceivedObj = (distributable) obj_in_steam,readObject();
} catch (ClassNotFoundException e) {
       System.err.println("Error<w_console>: Couldn't recieve application code!");
} 
ReceivedObj.test();

ObjectToSend類實現Serializable時,一切正常,而我沒有使用接口,因為我的所有類都在一個目錄中,因此客戶端“了解”該對象。 現在,我希望它可以跨物理網絡工作,以便客戶端僅具有對象的接口。 客戶端似乎無法接收該對象,因為每次都會引發異常。

應該是這樣的。 您可以使用沒有代碼的類做什么?

在這里看看:stackoverflow.com/questions/8175052/java-polymorphism-my-teacher-claims-you-distribute-an-executable-object-thr

為了能夠使用objectinput / outputstream序列化和反序列化對象,這些類必須實現Serializable。

此外,反序列化器還必須能夠在您要反序列化的類路徑上找到類,因為該類路徑以序列化形式嵌入。

如果希望客戶端在編譯時僅具有接口,則需要在運行時從服務器下載實際的類。

Jini (又名Apache River)使此操作變得容易。

正如其他答案所暗示的那樣,客戶端還必須知道您要發送的對象的類。

通常,對於這樣的經典客戶端-服務器示例,將創建三個軟件包/項目:

通用:客戶端和服務器使用的代碼; 您要從服務器發送到客戶端的對象的類定義在這里

客戶:僅客戶需要了解的所有代碼

服務器:僅服務器需要了解的所有代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM