【问题标题】:Sending RMI stub over UDP通过 UDP 发送 RMI 存根
【发布时间】:2016-04-20 18:28:29
【问题描述】:

我希望通过 UDP 发送 RMI 存根,只是我不知道如何在发送方上创建新的 DatagramPacket 并从接收方上的 DatagramPacket.getData() 返回的数组中重构存根。例如,如何可靠地计算数据包的大小?

谁能帮帮我?

谢谢,

欧文。

【问题讨论】:

  • 计算包的大小在哪里? RMI 存根真的可以序列化吗?
  • 我只想通过 UDP 发送一个存根,这样接收方就可以将远程方法作为客户端调用到发送方作为服务器。
  • 这不是我问的。我已经有 10 多年没有使用 RMI 了,而且我根本不认为存根是可序列化的(这意味着你不能将它们发送到任何地方)。您需要 RMI、UDP 或两者的帮助吗?如果两者兼而有之,那就太宽泛了。
  • 好吧,好吧...我需要将 RMI 存根从一台主机发送到另一台主机。显然(因为这个观察结果是我的问题的一部分)需要计算数据包的大小(或至少是它的数据),以便可以可靠地重构接收器上的存根。我需要帮助解决我的问题:通过 UDP 将 RMI 存根发送到另一台计算机...
  • 那么,你是如何将存根转换为字节的?测量生成的byte[] 的大小,这就是你的数据包的数据大小。

标签: java udp rmi


【解决方案1】:

你可以这样做:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(stub);
oos.close();
byte[] bytes = baos.toByteArray();
DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, target, port);
// etc ... send this datagram

在接收端,这个过程的逆过程,我将把它作为练习留给读者。

但我的第一个问题是“为什么?”您为什么不按照设计者的意图使用 RMI 注册表?还是 RMI 本身?这里不需要 UDP。

NB RMI 存根确实是可序列化的,这是 Registry 的基础。

【讨论】:

  • 确实是这样(现在我刷新了我的记忆),我已经有一段时间没有做 RMI 了,但整个场景听起来很不对。
  • @EJP 谢谢。这似乎是我需要的。我会这样做并回复你。
  • 至于为什么,这来自您之前为我回答的问题:我想将一个 UDP 数据包从一个设备多播到其他设备的集群,以便接收者可以自行决定哪一个他们将通过提供的存根与发件人联系。注册表不适用于多播吗?
  • 我勾选了这个答案,因为它似乎给了我实现我的解决方案所必需的东西。但是,我还没有让我的实现工作,所以我仍然在这里寻找答案。我可能会问另一个问题...
  • 正在寻找what的答案?我回答了你问的问题。如果您还有其他问题,请务必提出,但您在这里的评论似乎完全不合适。
猜你喜欢
  • 2018-11-09
  • 2014-07-13
  • 1970-01-01
  • 2017-01-25
  • 2012-07-27
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多