【发布时间】:2012-12-22 17:55:56
【问题描述】:
对于我正在开发的 iOS 应用,我希望多部手机能够相互连接并能够在这些设备之间进行语音聊天。
当两台设备都在同一个网络上时,我可以正常工作。这很简单,我想做的大部分事情都是可能的。
但现在我正在添加互联网支持,这很麻烦。我将首先尝试使用我设置的小型 Web 服务来解释我想如何匹配设备。
服务器
- 使用会话模式 GKSessionModePeer 开始一个新的 GameKit 会话
- 在我刚刚创建的会话中找到服务器的“Peer ID”
- 在空闲端口上创建一个新的 CFSocketRef 并使其准备好接受连接
- 将 Peer ID 和端口号发送到我的 Web 服务,在外部服务器上运行。
网络服务
- Webservice 接收信息并将其与客户端的 ID 和 IP 地址一起存储在数据库中。
- 将 ID 发送回服务器,服务器会显示 ID
客户
- 当用户选择使用 GameKit 的“在线”功能搜索游戏时,我要求用户输入 ID(用户应输入服务器接收到的 ID)。
- 客户端连接到提供 ID 的 Web 服务。网络服务返回有关服务器会话的信息(IP、PORT、Peer ID)。
- 用户尝试使用端口信息连接到 IP 地址,并与服务器建立输入和输出流。
这当然行不通,因为我的网络不允许传入连接和随机端口(来自外部网络)。
但现在的问题是,我该如何解决这个问题?我希望能够在两台设备之间建立点对点连接,这些设备可以在同一个网络上,也可以在不同的网络上。
是否有框架、示例或任何内容显示如何做到这一点?我希望能够将数据从设备发送到设备,而无需先将其发送到服务器。
【问题讨论】:
标签: objective-c ios p2p gamekit