gpt4 book ai didi

java - 如何在 java 中通过 tcp/ip 网络连接发送用户定义的类对象?

转载 作者:行者123 更新时间:2023-11-30 05:57:16 26 4
gpt4 key购买 nike

这是我想从客户端应用程序发送到服务器应用程序的用户定义类的示例:

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 合作伙伴,您可能希望使用自定义序列化协议(protocol)或一些基于 XML 的格式。

关于java - 如何在 java 中通过 tcp/ip 网络连接发送用户定义的类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com