一段时间以来,我一直在玩 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,这使得图像的传输真的很慢。