2013-05-18 58 views
0

我正在嘗試使用GKSession連接2個設備。當設備在同一個WiFi網絡上工作,但是當我嘗試連接不同WiFi網絡上的設備時,它不起作用。 這是我GKSession使用GKSession通過不同的WiFi網絡連接2個設備

代碼
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。

據蘋果

一個GKSession對象提供發現並連接到使用藍牙或Wi-Fi附近的iOS設備的能力。

請幫助我ia m嘗試使用GKSession創建聊天應用程序。

回答

3

iOS的GameKit最有可能使用Bonjour這個,它通過在本地網絡上進行廣播來工作。它不會在兩個獨立的Wi-Fi網絡之間工作。

這意味着您需要一箇中央服務器(至少在連接設置期間)。看看XMPP,如果你還沒有這樣做。

祝你好運!

相關問題