iPhone SDK:GameKit和大文件+连接丢失

时间:2009-08-31 12:35:58

标签: ios iphone gamekit transfer

有一段时间我一直在玩GameKit,但现在我面临着非常糟糕的困难。

我将通过蓝牙发送更大的文件 - 1-2MB。我已经准备了一个数据包(每个约8kB)。

我的应用程序的工作方式如下所示:

iPhone - sending header: file divided into 25 parts
iPod - received header: OK I got it waiting for 25 parts
iPhone - sending part #1
iPod - received part #1 send next
iPhone - sending part #2
iPod - received part #2 send next
...
iPhone - sending part #24
iPod - received part #24 send next
iPhone - sending part #25
iPod receiving part #25 processing file

我使用以下方式发送文件部分和消息(发送确认):

[mSession sendData:data toPeers:mPeers withDataMode:GKSendDataReliable error:nil];

并接收数据:

- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context

我想知道您如何处理蓝牙传输过程中可能出现的一些问题。浏览文档如果数据已交付,GKSessionDelegate不会向我提供任何信息。

在90%的情况下,传输工作正常,但有时会突然停止,并且在没有重新连接/重新启动应用程序的情况下不会继续。

如果我不能在1秒内得到响应,我试图发明一个简单的解决方案来重新设置数据:

-(void)sendAgain {
    [self sendData:bufor];
}
-(void)sendData:(NSData *)data {
    bufor = [data retain];

    timeoutTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(sendAgain) userInfo:nil repeats:NO];

    [mSession sendData:data toPeers:mPeers withDataMode:GKSendDataReliable error:nil];
}
如果发件人收到成功传送文件部分的确认,则

timeOutTimer无效。但事实上,当我实施这个解决方案时,存在更多问题。

桌面上的设备彼此相邻。

您如何处理设备之间“未送达”数据的问题?它只是一个工具,但在开发游戏时它会如何烦人?

顺便说一句,发短信聊天消息从来没有引起任何问题,而且我使用相同的方法。

事实上,连接很少丢失,只是数据喜欢在空中丢失。我已经将各部分分开,因此数据大小约为8kb,真正使图像传输真正变慢的原因。

2 个答案:

答案 0 :(得分:2)

GameKit框架在这一点上并不十分可靠,即使是我正在处理的游戏的简单数据交换。我不会用它来传输大数据,你只是要求头痛。

答案 1 :(得分:1)

我同意“它”和“refulgentis”。通过GK执行此操作会要求执行不可靠。你最好通过Bonjour和wiFi进行设置,或者让每个用户从某个中央离线源下载内容。如果您的设计要求大文件从一个设备移动到另一个设备,您可能希望在一侧上传它们而在另一侧下载它们,而不是尝试设备到设备传输大文件。