发送第一个数据后,蓝牙会话立即结束

时间:2010-10-01 19:43:22

标签: iphone bluetooth

无法理解为什么会发生这种情况,但是当我使用蓝牙向连接的对等设备发送数据时,他们会很好地接收数据但是会立即断开连接,无法进行进一步的交互。任何人都可以说明为什么会发生这种情况吗?我尝试将超时更改为60秒,我尝试将发送的数据量减少到少于500字节,但我仍然遇到这种奇怪的情况,即对等体会立即断开连接。是因为我使用GKSession来初始化网络,然后是GKPeerPicker供人们连接吗?

这是我的数据发送和接收代码。这通常是暂时的,可能会改变以容纳大量数据,但是现在我只想建立一个稳定的连接。

-(void)transmitWholeClusterToPeer:(NSString *)peerID{
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *encoder = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];

[encoder encodeInt:0 forKey:@"Mode"];
[encoder encodeObject:clusterMap.header forKey:@"Header"];
[encoder finishEncoding];

NSArray *peerList = [[[NSArray alloc] initWithObjects:peerID, nil] copy];

[network sendData:data toPeers:peerList withDataMode:GKSendDataReliable error:nil];
[encoder autorelease];      
[peerList autorelease];

}

-(void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session
       context:(void *)context{
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
int mode = [decoder decodeIntForKey:@"Mode"];

switch (mode) {
    case 0:
        clusterMap.header = [decoder decodeObjectForKey:@"Header"];
        break;
    default:
        break;
}

}

1 个答案:

答案 0 :(得分:0)

我不能肯定这是确定的答案,但我已经通过删除GKPeerPicker并实现我自己的客户端 - 服务器设置代码来解决问题,这些代码生成了“保持活着”。我认为问题实际上只是我手动设置会话,然后使用Peer Picker连接到它。看来Peer Pickers在连接其他Peer Pickers时只是稳定且有用。