我正在尝试编写一个应用程序,通过Game Kit框架与运行应用程序的其他iPhone交换数据.iPhone发现彼此并且连接正常,但是当我发送数据时会出现问题.我知道iPhone已正确连接,因为当我序列化NSString并通过连接发送它时,另一端就好了.但是当我尝试存档一个更大的对象(使用NSKeyedArchiver)时,我收到错误消息"AGPSessionBroadcast failed(801c0001)".
我假设这是因为我发送的数据太大(我的文件大小约为500k,Apple似乎建议最多95k).我已经尝试将数据分成几个转移,但我永远无法在另一端正确地取消归档.我想知道是否有其他人遇到过这个问题,以及你是如何解决它的.
我遇到了同样的问题,文件大小约为 300K。问题是发送方需要知道接收方何时在发送下一个块之前清空了管道。
我最终得到了一个在两边都运行的简单状态引擎。发送方发送一个标头,其中包含将发送的总字节数和数据包大小,然后等待来自另一方的确认。一旦它获得握手,它就会继续发送固定大小的数据包,每个数据包都标有序列号。
接收器获取每一个,读取它并将其附加到缓冲区,然后将其收到带有序列 # 的数据包写回管道。发送方读取数据包#,切出另一个缓冲区的值,依此类推。每一方都跟踪他们所处的状态(空闲、发送标头、接收标头、发送数据、接收数据、错误、完成等)。双方必须跟踪何时读/写最后一个片段,因为它是可能小于完整的缓冲区大小。
这工作正常(虽然有点慢)并且它可以扩展到任何大小。我从 5K 数据包大小开始,但运行速度很慢。将它推到 10K,但它开始引起问题,所以我退缩并保持在 8096。它适用于二进制和文本数据。
| 归档时间: |
|
| 查看次数: |
4254 次 |
| 最近记录: |