【问题标题】:How to test broadcast udp packets in Java on the same machine?如何在同一台机器上用 Java 测试广播 udp 数据包?
【发布时间】:2012-08-26 16:29:57
【问题描述】:

我可以在我的机器上执行 UDP 广播数据包吗?我没有网络,我只有便宜的 linux 盒子。我想让一个服务器广播一个数据包,而两个或多个客户端在同一台机器上接收它们。那可能吗?我使用什么 IP?


@gravyface 给了我希望,但我尝试了:1) 服务器发送到 127.255.255.255:54321,客户端监听 0.0.0.0:54321。 2) 服务器发送到 127.255.255.255:54321,客户端监听 127.0.0.1:54321。 3) 服务器发送到 127.255.255.255:54321 和客户端监听 127.255.255.255:54321。 它们都不起作用! :(

OBS:我正在使用 REUSE_ADDR 和 SO_BROADCAST 选项。

【问题讨论】:

    标签: java networking udp real-time


    【解决方案1】:

    我可以确认 127.255.255.255 可以在 Linux (Ubuntu) 上运行,而不能在 Mac (Snow Leopard) 上运行。如果您知道如何在 Mac 上执行此操作,请告诉我。 :)

    【讨论】:

      【解决方案2】:

      您可以使用具有不同虚拟地址的虚拟网络适配器。例如,在 Windows 中,您可以在 Linux 中使用 Microsoft LoopbackTUN/TAP

      另一种解决方案是使用 VirtualBox 等虚拟化软件创建内部网络,但这需要稍快的机器。如果您只能买得起(因为它是一个便宜的盒子)一台虚拟机,您可以启用 1-4 个网络适配器,这样您就可以在虚拟设备的每个虚拟适配器上单独绑定不同的 UDP 客户端。

      【讨论】:

      • 不同的端口?那没有意义。服务器向广播地址和端口发送一次,客户端得到数据包。我可以使用 REUSE_ADDR 选项让两个不同的客户端绑定到同一个 PORT 吗?
      • 我不能让服务器循环将数据包发送到所有客户端,这会破坏广播的目的,并且我的服务器没有以这种方式实现。服务器需要一次发送一个数据包,两个客户端需要在同一台机器上以某种方式接收它。请在问题中查看我的编辑。
      • 你说得对。它可以用于任何目的。我删除了第三种解决方案
      猜你喜欢
      • 2014-02-12
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多