在上一篇文章中,KDE Connect iOS 的构建已修复,可以将应用程序安装到设备或模拟器中。
要与其他设备连接,我们需要与它们配对。但是,在此之前,设备需要使用 KDE Connect 识别机制相互发现。
识别过程
初始身份验证过程非常简单,如下所示:
1.首先,设备 A 将发送一个 UDP 广播数据包,其中包含其身份数据包;
2.每个接收到 UDP 广播的设备 B 都会尝试提取数据包中的 TCP 端口信息,并尝试通过该端口与设备连接;
3.通过 TCP 连接,每个设备 B 都会向设备 A 发送自己的标识数据包;
4.然后,设备会将链接项添加到发现的设备列表中,并等待用户的操作。
升级识别网络包
第一次尝试,除了 iOS 设备,我所有的设备都可以找到彼此。
在调试模式下,我看到发现消息和相关的输出:
"Inoki" uses an old protocol version, this won't work
因此,我使用 Wireshark 捕获数据包,以了解为什么 KDE Connect iOS 中的旧实现无法正常工作。
区别在于数据包内容和定制数据。
识别网络包内容
所有的网络包都是通过序列化 NetWorkPackage
类来实现的,这个类在 lib/NetworkPackage.h
和 lib/NetworkPackage.m
文件中被定义。
类中包含的属性有:
@property(nonatomic) NSString* _Id;
@property(nonatomic) NSString *_Type;
@property(nonatomic) NSMutableDictionary *_Body;
@property(nonatomic) NSData *_Payload;
@property(nonatomic) NSDictionary *_PayloadTransferInfo;
@property(nonatomic)long _PayloadSize;
序列化之后,内容将是 JSON 格式的字符串。例如,来自 KDE Connect iOS 的数据包内容为:
{
"id":"1587284674",
"type":"kdeconnect.identity",