【问题标题】:Searching for peers in local network在本地网络中搜索对等点
【发布时间】:2011-05-14 04:08:14
【问题描述】:

我想在我的程序中实现功能,这将使它能够发现在本地网络中运行相同应用程序的主机。为此,我将在我的程序中打开一个 UDP 套接字并在地址 224.0.0.1(使用 IPv4 时)或 ff02::1(使用 IPv6 时)加入多播组。然后我要通知其他主机,我刚刚登录到这个网络。根据我的想法,我有两个问题:

  1. 这是正确的方法还是有更好的解决方案?
  2. 在本地网络(例如热点)中使用多播通信的常见策略是什么?这通常是可能的还是大多数路由器阻止甚至根本不支持多播通信?

我用 C++ 为 Linux 开发我的应用程序,将来我打算用 C# 为 Windows 编写版本。

【问题讨论】:

    标签: networking udp ipv6 multicast ipv4


    【解决方案1】:

    这通常是您的最佳选择。另一种选择是 UDP 广播,但无法保证传送,因此您必须定期广播以确保其他应用程序听到它。

    就政策而言,我刚刚检查了我的 Linksys Wifi 接入点,默认情况下它已禁用多播。我怀疑很多地方都在这个默认配置下运行

    【讨论】:

    • 另一个问题,getsockopt() 在尝试加入网络中的多播组时会返回错误,而多播通信被阻止?
    • 所有 UDP 套接字,包括多播和单播,不保证交付。对于发现,常见的做法是广播或多播心跳包。
    • 路由器默认会阻止广播和多播,但这无关紧要,因为问题是关于本地网络发现,阻塞是指传递到下一跳的流量。
    • @Steve-o 我目前已经使用广播实现了发现。它在家庭 LAN 的“正常”范围内工作(即一个集成的 AP、交换机、来自 ISP 的路由器)。我现在想更改为多播,但如果多播被禁用,它只是使用广播还是不提供任何内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    相关资源
    最近更新 更多