2013-05-18 4 views
0

GKSession을 사용하여 두 장치를 연결하려고합니다. 장치가 동일한 WiFi 네트워크에 연결되어 있으면 작동하지만 다른 장치에 연결할 때 작동하지 않습니다. 이것은 내가 그것을 GKSession를 사용하여 가능하면 확실하지 않다 GKSessionGKSession을 사용하여 서로 다른 WiFi 네트워크에서 두 장치를 연결합니다.

내 코드
chatSession = [[GKSession alloc] initWithSessionID:AppName displayName:name sessionMode:GKSessionModePeer]; 
[chatSession setDataReceiveHandler:self withContext:nil]; 
chatSession.delegate = self; 
chatSession.available = YES; 



-(void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state{ 
NSLog(@"state=%d", state); 
if(state == GKPeerStateDisconnected) 
{ 
    // A peer disconnected 
    chatSession.available = YES; 
    NSLog(@"Disconnected"); 

    [data removeAllObjects]; 
    chatInput.hidden = YES; 


} 
else if(state == GKPeerStateConnected) 
{ 
    // You can now send messages to the connected peer(s) 


    NSData *imgData = UIImageJPEGRepresentation(myImage, 0.5); 
    if(imgData==nil) 
     NSLog(@"myImage is nil"); 

    NSError *err; 
    //NSLog(@"pid=%@", pID); 
    NSLog(@"before sending image"); 
    [chatSession sendData:imgData toPeers:[NSArray arrayWithObject:pID] withDataMode:GKSendDataReliable error:&err]; 
    NSLog(@"after send data"); 
    if(err) 
     NSLog(@"error:%@", err.description); 
} 
else if (state == GKPeerStateAvailable) 
{ 

    pID = peerID; 
    [session connectToPeer:peerID withTimeout:60*120]; 
} 

}

-(void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString *)peerID{ 
// We can now decide to deny or accept 
bool shouldAccept = YES; 
if(shouldAccept) 
{ 
    pID = peerID; 
    [session acceptConnectionFromPeer:peerID error:nil]; 
} 
else 
{ 
    [session denyConnectionFromPeer:peerID]; 
}} 

입니다. 애플

GKSession 개체를 발견하고 블루투스 또는 Wi-Fi를 사용하여 주변의 iOS 장치에 연결할 수있는 기능을 제공합니다에 따르면

.

GKSession을 사용하여 채팅 응용 프로그램을 만들 때 도움을주십시오.

답변

3

iOS의 GameKit은 아마도 로컬 네트워크에서 브로드 캐스트를 수행하여 Bonjour을 사용합니다. 두 개의 개별 Wi-Fi 네트워크 간에는 작동하지 않습니다.

이것은 연결 설정 중 중앙 서버가 필요하다는 것을 의미합니다. XMPP을 아직 보지 않았다면보십시오.

행운을 빈다.