如何通过数据报套接字发送对象

3

我正在进行一些Android项目,并尝试通过数据报套接字将对象传递到另一个设备 对象包含类的“字符串”数据成员(用户名,服务).. 我该怎么做呢?


虽然我了解了一些将对象转换为字节的概念,但在调试过程中发现,接收到的字节无法再次转换为对象。尽管字节接收正常。 - manas
你需要从组成部分在接收端构建一个新的对象。如果其中一些不是简单可序列化的对象,你需要先从可序列化的组件构建它们。也就是说,你需要使用从套接字获取的数据来提供所有必要的构造函数。 - Chris Stratton
@user1362127 UDP是不可靠的,有些数据包可能无法到达目标,有些可能会延迟到达。如果您想传输字符串和其他对象,并且不想重新传输和重新排序数据包,则应使用TCP套接字。-> https://dev59.com/L1jUa4cB1Zd3GeqPUcZk - zapl
2个回答

8

在发送方将一个ObjectOutputStream覆盖在ByteArrayOutputStream上。在写入后从ByteArrayOutputStream中收集字节,并在数据包中发送该字节。在接收方进行反向操作,将数据解压回一个对象。

您的发送端的伪代码:

final ByteArrayOutputStream baos = new ByteArrayOutputStream(6400);
final ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
final byte[] data = baos.toByteArray();

final DatagramPacket packet = new DatagramPacket(data, data.length);
// Send the packet

0

数据报包传输对象

无法将对象作为对象通过网络发送,您必须使用以下类将其转换为字节数组

  • ObjectOutputStream
  • ByteArrayOutputStream

然后通过DatagramPacket类发送它,但是您自己的类应该通过添加实现可序列化接口来进行序列化。如果您查看上面的链接,您将逐步了解更多详细信息和更多有用的信息。


抱歉,此网站不允许我上传图片。 - Ahmed Adm
请添加更多细节。 - Syeda Zunaira
1
你不能直接将对象通过网络发送,必须使用以下类将其转换为字节数组:
  • ObjectOutputStream
  • ByteArrayOutputStream
然后通过 DatagramPacket 类发送。但是,你的自定义类应该实现 Serializable 接口以进行序列化。如果你查看上面的链接,你将逐步了解更多详细信息和更有帮助的内容。
- Ahmed Adm
请在您的回答中提供此详细信息,欢迎来到 Stack Overflow 并感谢您的回答! - Syeda Zunaira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接