【问题标题】:How to broadcast in java network如何在java网络中广播
【发布时间】:2011-09-27 22:44:42
【问题描述】:

这是我第一次用 java 编程网络。 我正在寻找一种以某种方式向整个网络中的所有节点发送广播的方法。让他们知道我的存在。 我正在尝试制作多人网络游戏,我希望客户能够看到所有可用的游戏来选择加入哪个游戏。 我想知道如何从服务器广播以及如何让客户端收听。

请简单点,我是新手:)

提前致谢。

【问题讨论】:

    标签: java networking client broadcasting


    【解决方案1】:

    不要混淆术语。

    广播通常用于 UDP。 UDP 不可靠,因为它不检查客户端是否接收到所有数据包。不广播向大量客户端打开大量 TCP 连接。

    要让您的客户端监听端口,您需要使用 ServerSocket 并读取它。

    【讨论】:

    • 其实我没有服务器的IP地址来通过ServerSocket连接它。我想通过服务器广播它的存在,以便获得它的 IP 地址。
    • 那么它会被真正广播,但正如 Michael Aaron Safyan 在评论中所写的那样,它只能在 LAN 中工作,因为路由器通常不会重定向广播(为了更好的衡量,想象每个人的广播都是通过互联网传播并堵塞“管道”)。
    【解决方案2】:

    要广播数据包,请将它们发送到给定子网的广播地址(子网的最后一个地址)。 IP 255.255.255.255zero network 的广播地址。

    IP 广播地址 255.255.255.255 存在一个特殊定义。它是零网络的广播地址或 0.0.0.0,在 Internet 协议标准中代表该网络,即本地网络。根据定义,向此地址的传输受到限制,因为它永远不会被将本地网络连接到 Internet 的路由器转发。

    Broadcast address

    所以要广播到您当前的网络,请将数据包发送到255.255.255.255

    【讨论】:

    • 这其实是个坏主意,因为 UDP 广播会消耗过多的网络资源,而且大多数路由器在没有自定义配置专门允许的情况下不会转发此类数据包。
    • @Michael 不知道大多数路由器不转发那个。那么 DHCP 是如何工作的呢?这就是我学习它并在其他 SO 答案/问题中看到它的方式,即 stackoverflow.com/questions/737899/broadcasting stackoverflow.com/questions/869925/… ...
    • 由于路由器不转发广播,因此只能到达局域网中的网卡(可能只在子网中)。
    • 我以为他是想实现一个多人网络游戏,所以在当前子网中运行应该就足够了。
    • @cularis,广播仍然会到达路由器,但路由器不会转发它。即使它在当前子网中工作,它实际上可能还不够。我很难学到这一点,因为我通过使用 UDP 广播实现某些东西而被学校项目烧毁。我们学校有多个路由器都使用相同的 SSID,因此即使多个设备连接到同一个逻辑网络,它们实际上也可能与不同的路由器通信,并且数据包不会到达其他路由器。
    【解决方案3】:

    我建议您使用PubSubHubbub 或类似的协议。基本上,您将拥有一个“集线器”,向其发送您想要“广播”的通知。每个节点都订阅该主题,方法是提供一个 URL,当新数据到达时集线器可以调用该 URL。当“集线器”收到此广播时,集线器会联系每个订阅 URL 以让节点知道有新数据。

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2019-04-02
      • 2018-03-25
      • 2011-09-16
      • 2016-08-28
      • 1970-01-01
      相关资源
      最近更新 更多