swift - 如何在 Swift 中查找本地网络上运行我的应用程序实例的设备的 IP 地址?

标签 swift macos sockets

我正在开发一个简单的 Swift 应用程序,用户可以在其中找到本地网络上正在运行我的应用程序实例的其他计算机,然后使用 TCP 套接字将数据发送到该计算机。

我的问题是如何查找同一网络上运行我的应用实例(跨平台)的设备的 IP 地址?

  • 我正在考虑列出本地网络上的所有设备,然后 检查他们是否打开了特定端口(我的应用程序的端口是 使用)?
  • 我还发现 Apple 提供了名为 Bonjour 的服务,该服务可以使我的进程被发现。我不确定这个解决方案是否适合跨平台通信。

最佳答案

除了与 Mac 相关的内容和高级解决方案(我相信关键字“网络服务发现”会将您带到它们)之外,还有一些适用于本地网络的内容:

有一个客户端应向其报告的服务器。一些类似于 hello 的简短 UDP 消息和超时机制足以保留网络中可用客户端的列表。

II 使用 IP 或 UDP 多播组来通知其他人客户端刚刚连接到网络。向多播组发送消息并监听该组以构建客户端列表。

但是,广播和多播不会通过路由器传输。因此,如果您的网络足够大,则只有邻近的客户端才会听到您的通知。为了克服它,

III DHCP 服务器可配置为通过 unassigned DHCP options 向客户端提供自定义数据。 。大型网络通常有这样的服务器。您可能可以使用它来发送客户列表,但我对此不确定。

关于swift - 如何在 Swift 中查找本地网络上运行我的应用程序实例的设备的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42235813/

相关文章:

ios - 获取字符串在其边界框中的基线位置

ios - 使用名称和 Int 值填充的 Swift Tableview 单元格

windows - Virtualbox 上 MacOS 和 Windows 之间的共享文件夹

sockets - 什么限制了 TCP 端口的连接数?

ios - SCNVector3 和 SCNVector3Make 之间的主要区别是什么

ios - 当用作函数中的参数时,结构值类型前面需要关键字 var

objective-c - Mac 上使用 Objective-C 的图像处理资源

macos - nextKeyView 切换到 NSBrowser 并在工具栏中搜索 View

c - 套接字 recv() 卡在带有 MSG_WAITALL 的大消息上

android - 是否可以从其他设备访问 AIDL 服务?