3

我正在开发一个 iOS 应用程序,它允许用户在本地与其他设备共享 PDF。当应用程序启动时,设备主动成为搜索正在广播文件的服务器的客户端。当客户端看到服务器时,它会在其选项卡中添加一个标记并向其表中添加一个条目。

我遇到的问题是 GKSession 仅允许在建立连接之前传输一个字符串 - 对等显示名称。我要传输的是文件名、页数,也许还有缩略图。

我目前能想到的实现这种行为的唯一方法是自动连接客户端和服务器,交换文件信息,然后自动断开它们。如果当前只有一个或两个文件正在广播,这可能会很好,当许多不同的设备正在广播时,可能会出现线程/同步问题。

例如,可能有 7 个文件可用。因此,客户端必须一一连接到它们才能接收所有文件的信息。这可能需要相当长的时间,并且用户可能已经决定他们希望下载“文件 1”。通过点击“文件 1”,应建立连接并开始传输。如果客户端正忙于检索有关其他可用文件的信息,这可能无法立即发生。

我还阅读了与服务器断开连接后不久再次连接到服务器的一些问题。(GKSession 每次尝试都没有连接?)。

所以我想这可以归结为简单的问题 - 有没有人知道我如何允许客户端接收有关服务器的其他信息,而不仅仅是 peerID 和 peerName?

4

2 回答 2

2

如何以 csv 格式设置显示名称,当您收到 csv 名称时,仅显示设备名称。

或者您可以发送一个 NSDictionary 的 JSON 字符串作为显示名称

将 Json 转换为 NSString 的示例:

{
     "DeviceName" : "Example",
     "File" : [
            {
                "FileName" : "PDF1"
                "TotalPages" : 100
            }
            ]
}

字符串化版本:

{"DeviceName" : "Example","File" : [{"FileName" : "PDF1","TotalPages" : 100}]}

然后,当您收到 DisplayName 时,仅显示 DeviceName 并在某处解析文件详细信息,以便稍后向服务器发送请求。

请记住,我不知道 GKSession 是否对显示名称长度有限制,因此此解决方案可能不适用于大量文件

于 2012-10-20T04:00:33.713 回答
0

我所做的是将显示名称限制为 16 个字符,并使用剩余的 24 个字符供我使用。

我创建了偏移量,从中读取应用程序需要的不同信息。例如 0 到 15 将代表设备名称;16-24 将代表文件扩展名。24 到 39 将代表文件名。如果字符串比其各自的空间长,则根据您的喜好将其截断或截断。如果字符串比其各自的空格短,则用空格填充。我已经编写了从 40 个字符的显示名称中获取这些字符串的方法。如果有人有更好的解决方案,我很乐意在这里。目前无法发布代码,因为我无权访问它。

干杯

于 2013-07-15T05:34:57.193 回答