0%

appleOS的Networking示例

        了解如何将 BonjourUDP/TCP套接字streams 一起使用,以及如何通过 CoreBluetoothwatch API 进行通信。

        如果你想学习如何使用 Bonjour 发现服务在设备之间 建立网络连接 ,那么你来对地方了。 在这篇文章中,我将向你展示基础知识,例如,你将能够从 手表iOS设备 制作遥控器,以便将数据直接发送到任何 tvOSmacOS 机器。


多平台开发

        如果要创建支持多个平台的应用程序,则可能要针对 macOSiOSwatchOStvOS 以及 Linux 。 下面的代码段将帮助你检测正在使用的当前平台。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#if os(iOS)
let platform = "iOS"
#elseif os(macOS)
let platform = "macOS"
#elseif os(watchOS)
let platform = "watchOS"
#elseif os(tvOS)
let platform = "tvOS"
#elseif os(Linux)
let platform = "linux"
#else
let platform = "unknown"
#endif

print(platform)

Network connection 101

Bonjour发现服务

         Bonjour ,也称为零配置网络,可使用 行业标准IP协议 在局域网上自动发现设备和服务。

        因此,基本上,你可以使用 Bonjour 在本地网络上找到网络设备。 如果你想弄清楚连接到 LAN的设备列表 ,这将非常方便。 使用 NetService类 将帮助你检测具有它们支持的可用服务的所有设备。 整个 Bonjour API 相对较小且编写良好。 从服务器方面,你只需创建 NetService对象 ,并通过 NetServiceDelegate监听 传入的连接。

**提示:**
        你必须与所有设备/模拟器都在同一WiFi网络上。

TCP 连接

         TCP 在通过 IP网络 进行通信的主机上运行的应用程序之间,提供可靠,有序且经过错误检查的八位位组(字节)流交付。

        借助 TCP ,你可以建立可靠的网络连接。 Foundation 中有一个 Stream类 ,可帮助你在设备之间来回发送数据。 如果你具有可以正常使用的 NetServiceDelegate 连接形式,则只需侦听流事件以通过 StreamDelegate 处理传入数据。 我不想详细介绍,只需下载 示例代码 并亲自检查一下即可。

UDP 连接

        使用 UDP ,计算机应用程序可以将消息(在这种情况下称为数据报)发送到 Internet协议(IP)网络 上的其他主机。

        如果查看有关 UDP 的文章,你会清楚地看到与 TCP 的主要区别在于该协议不能保证你数据传输的安全。 数据可能无序到达或重复到达,这是处理这些情况的任务,但是 UDP 很快。 如果要构建文件传输应用程序,则绝对应该使用 TCP ,但是例如控制实时动作游戏 UDP 就足够了。

CocoaAsyncSocket

        这个库非常好用,对于所有想快速建立网络连接的人来说,它可能是最好的选择,因为与实现委托相比,它所需的代码更少。 当然,你仍然需要在整个内容上方添加 Bonjour层 ,但这很好。

        如果你使用的是 CocoaAsyncSocket ,你会发现该 API 很简单,只有5分钟后,我才能相对容易地了解发生了什么,并且能够通过网络发送消息。 它支持所有 Apple平台 ,你可以使用 CarthageCocoaPods 无缝集成。

CoreBluetooth APIs

        我对 CoreBluetooth框架API 并不是很熟悉,这就是为什么我基本上只是遵循并把这个 tutsplus.com 代码示例移植到 Swift 4 的原因。老实说,我觉得 API 与所有这些凌乱的委托函数过于复杂。 如果必须在 CoreBluetoothCocoaAsyncSocket 之间进行选择,那么我会选择最后一个。 所以,是的,显然我不是蓝牙专家,但是这个小项目对 CB框架 内部的工作原理是一个很好的第一印象。

WatchConnectivity framework

        如果要在 iOSwatchOS 之间进行通信,则可能会使用 WatchConnectivity框架 ,尤其是 WKSession类 。 它实际上并没有那么复杂,只需几行代码,你就可以将手表的信息发送到 iPhone 。 你可以阅读 这篇文章 ,但是,如果下载 源代码,则在包中将发现几乎相同的内容。

坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道