簡體   English   中英

如何在Java中通過TCP / IP網絡連接發送用戶定義的類對象?

[英]How do you send a User defined class object over a tcp/ip network connection in java?

這是我想從客戶端應用程序發送到服務器應用程序的用戶定義類的示例:

class dataStruct implements Serializable{
    byte data;
    int messageNum;
    public void setData(byte datum, int messageNumber){
        data=datum;
        messageNum=messageNumber;
    }
}

如何在Java中通過TCP / IP連接發送用戶定義的類?

我可以使用什么類型的流來完成此操作(如果我發送的不僅僅是文本)?

我可以通過套接字流傳遞完整的對象,還是在通過流傳遞對象后始終將其強制轉換?

我正在編寫服務器/客戶端應用程序,但我只能找到包含通過網絡連接傳遞的原始類型或字符串示例的教程,而不是用戶定義的類型。

非常感謝您的幫助和指導。

在發送方使用ObjectOutputStream,在接收方使用ObjectInputStream。

為了更清楚一點,這是一個示例(沒有任何異常處理)。

發送方:

dataStruct ds = ...;
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(ds);
oos.close();

接收方:

ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
Object o = ois.readObject();
if(o instanceof dataStruct) {
   dataStruct ds = (dataStruct)o;
   // do something with ds
}
else {
   // something gone wrong - this should not happen if your
   // socket is connected to the sending side above.
}

所以是的,您必須在接收方進行強制轉換,以便編譯器知道正確的類。 (強制轉換不會更改對象的類,只會更改編譯器對其的了解。)

此序列化還可用於將對象保存到文件。 當然,這僅給Java提供了互操作性,如果您有非Java合作伙伴,則可能要使用自定義序列化協議或某些基於XML的格式。

讓對象實現Serializable標記接口,然后使用ObjectOutputStreamObjectInputStream傳輸對象。 當對象在另一端出現時,將通過ObjectInputStream上的readObject()方法返回Object ,因此,是的,您需要將其轉換為正確的類型。

暫無
暫無

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

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