MST

星途 面试题库

面试题:Objective-C 中 P2P 网络通信基础

在 Objective-C 里,简述使用 Bonjour 框架搭建 P2P 网络通信的基本步骤,并说明 Bonjour 主要解决 P2P 通信中的哪些问题。
19.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

使用 Bonjour 框架搭建 P2P 网络通信的基本步骤:

  1. 服务发布
    • 创建一个 NSNetService 对象,用于描述要发布的服务。需要指定服务的名称、类型(如 _http._tcp 表示 HTTP 服务基于 TCP 协议)、端口号等信息。
    • 调用 NSNetServicepublish 方法来发布该服务,使其在本地网络中可见。
  2. 服务发现
    • 创建一个 NSNetServiceBrowser 对象,用于浏览本地网络中的服务。
    • 设置 NSNetServiceBrowser 的代理(实现 NSNetServiceBrowserDelegate 协议),以便在发现新服务或服务状态改变时收到通知。
    • 调用 NSNetServiceBrowsersearchForServicesOfType:inDomain: 方法,开始搜索指定类型和域(通常为本地域 @"")的服务。
  3. 连接到服务
    • NSNetServiceBrowser 发现服务时,会调用代理的 netServiceBrowser:didFindService:moreComing: 方法。在这个方法中,获取发现的 NSNetService 对象。
    • 对获取到的 NSNetService 对象调用 resolveWithTimeout: 方法,将服务的名称解析为实际的地址和端口等连接信息。
    • 解析完成后,会调用代理的 netServiceDidResolveAddress: 方法,在该方法中,可以使用解析得到的地址信息,创建相应的连接(如使用 CFStream 等方式创建网络连接)来与服务进行通信。

Bonjour 主要解决 P2P 通信中的问题:

  1. 服务发现:Bonjour 使得设备能够自动发现本地网络中其他设备提供的服务,无需用户手动配置服务器地址等信息。这极大地简化了 P2P 网络中设备间相互发现的过程,提高了用户体验。
  2. 服务注册与发布:设备可以方便地将自己提供的服务注册并发布到本地网络中,让其他设备能够知晓。解决了如何在 P2P 环境下有效地宣告自己的服务,以便其他对等节点能够找到并使用该服务的问题。
  3. 地址解析:Bonjour 帮助将服务的名称解析为具体的网络地址和端口等连接信息。在 P2P 通信中,由于设备的动态性,直接使用 IP 地址等固定标识可能不太方便,Bonjour 通过名称解析机制,使得设备间可以使用更具描述性和灵活性的服务名称来建立连接。