2013-04-25 143 views
7

我对网络编程没有太多经验,我正在编写一个多平台系统,要求每个设备能够在同一局域网内找到其他设备,我在想什么是一个正确的做法,可能是这里的人能向我提供一些建议,这是我的设计要求,什么是在局域网上实现设备发现的最佳方式

  1. 我使用C++和解决方案必须是跨平台的,这至少能够在iOS上运行时,Windows ,Android。

  2. 该系统应该是相当轻的重量,并在没有特殊设置或网络要求的情况下工作,如果可能的话。

下面是到目前为止我的头脑风暴不同的方法,

  1. 使用UPnP协议,但我不是很熟悉的话,并没有显得有关于如何使用多实例它在代码中。

  2. 使用传统的套接字方法,在每个设备上创建服务器/客户端,并将数据包发送到LAN上的每个IP。之后手动完成所有工作。纠正我,如果我错了,如果我发送一个数据包到广播地址,这意味着系统会自动发送我的数据包到子网内的每个IP?

  3. 使用外部服务器,所有客户端将注册到该外部服务器,然后从服务器获取其他客户端的信息。但是,我不确定每个客户端应该连接哪些信息以确定它们在同一个LAN中。

让我知道如果我在想什么使任何感官和任何建议非常感谢。

+0

通常将UDP数据包发送到广播地址,并提供稍后进行常规连接的设置信息。发送到广播的包将被发送到该子网中的每个设备。我建议启动Wireshark以查看幕后发生的情况。 – Brad 2013-04-26 14:54:44

+0

感谢您的信息,但我听说路由器可以设置为停止广播,并且它通常是LAN中的默认设置。真的吗?如果是的话,那么这种方法是不是很可靠,然后 – NachoChip 2013-04-26 18:17:00

+0

不,路由器会在您的网络和另一个网络之间。广播数据包仅发送到您的网络,因此路由器的配置对它们没有影响。另外,如果路由器能够做到这一点,你的网络将无法工作。广播数据包对于基本功能很重要,例如DHCP,UPnP和Bonjour(例如Marko的答案)。 – Brad 2013-04-26 18:38:46

回答

3

你还没有列出的一个选项是ZeroConf's DNS-SD协议。

它被苹果公司大量使用 - 将其作为Bonjour(néeRendezvous)销售。 与iOS和MacOSX紧密集成。
Apple还提供了一个Windows实现,一个SDK并且已经开源了mDNS服务。

Android似乎支持它out of the box

对于大多数桌面发行版中包含的Avahi形式的Linux,也有强大且成熟的支持。

似乎用户需要安装任何东西的唯一平台是Windows,即使这样,它也会与iTunes(用于音乐库共享)以及用于任何Apple无线接入点的安装软件一起安装。

+0

仅供参考 - 需要了解的内容:http://superuser.com/questions/730288/why-do-some-wifi-routers-block-multicast-packets-going-from-wired-to-wireless – hooby3dfx 2014-03-26 12:00:07

相关问题