2010-12-27 2 views
0

J'ai essayé de créer un réseau client/serveur simple via Bluetooth avec 5 iPods. Un iPod enverra des chaînes de base comme "stop" ou "go" à quatre iPods, qui feront ensuite diverses choses quand ils recevront les commandes. J'utilise actuellement GameKit sans PeerPicker, et il a été peu fiable et compliqué de démarrer même les connexions. Une fois connecté, je peux envoyer des données très bien entre deux appareils, mais pas plus. J'aimerais pouvoir diffuser des messages courts et simples à des «clients» iPod à partir d'un «serveur» iPod sans réseau (comme une télécommande). J'ai regardé de nombreux exemples, y compris les chars et les exemples de wiTap, mais je suis surpris qu'il n'y ait rien de plus simple sans avoir besoin d'un réseau.Diffusion de messages Client/Serveur iPhone

Voici comment je commence la connexion:

- (IBAction) btnConnect:(id)sender 
{ 
    if (sender == connectServer) { 
     self.currentSession = [[GKSession alloc] initWithSessionID:@"0000" 
                  displayName:nil 
                  sessionMode:GKSessionModeServer]; 
     NSLog(@"Setup Server Connection"); 

    } else { //connectClient 
     // Peers discover themselves ... 
     self.currentSession = [[GKSession alloc] initWithSessionID:@"0000" 
                 displayName:nil 
                 sessionMode:GKSessionModeClient]; 
     NSLog(@"Setup Client Connection"); 
    } 

    amAcceptingConnections = YES; 
    [self.currentSession peersWithConnectionState:GKPeerStateAvailable]; 
    self.currentSession.delegate = self; 
    self.currentSession.disconnectTimeout = 30; 
    [self.currentSession setDataReceiveHandler:self withContext:nil]; 

    // Advertise the session to peers 
    self.currentSession.available = YES; 
} 

Et je gère la connexion avec le didChangeState dans le délégué

- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state { 
    thePeerID = [session displayNameForPeer:peerID]; 
    NSLog(@"didChangeState was called from peerID: %@.", thePeerID);  
    self.currentSession = session; 

    switch (state) { 
     case GKPeerStateAvailable: 
      thePeerID = [session displayNameForPeer:peerID]; 
      NSLog(@"Peer %@ Available", thePeerID); 
      [session connectToPeer:peerID withTimeout:30]; 
      NSLog(@"Issued Peer Connection"); 
      //session.available = NO; //TODO: Look at this 
      break; 

     case GKPeerStateUnavailable: 
      NSLog(@"Peer %@ Unavailable", thePeerID); 
      break; 

     case GKPeerStateConnected: 
      NSLog(@"Peer %@ Connected", thePeerID); 
      break; 

     case GKPeerStateDisconnected: 
      NSLog(@"Peer %@ Disconnected", thePeerID); 
      [self.currentSession release]; 
      currentSession = nil; 
      break; 
    } 
} 

Le problème est que les feux de la méthode didChangeState quand il est bon et prêt et le comportement est imprévisible. Peut-être que c'est un problème avec Bluetooth ou GameKit, mais je voudrais me connecter sans que l'autre iPod "autorise" la connexion. Est-ce possible? Je pense que je vais avoir besoin d'un routeur et d'un réseau pour quelque chose d'aussi simple?

Merci

Répondre

0

Je l'ai fait beaucoup plus de recherches et j'ai décidé d'utiliser un petit point d'accès sans fil de 5 V pour établir mon multiple système de communication iPod. Les trucs GameKit sont parfaits pour deux iPod qui se parlent, mais ce n'est pas très fiable (et la gamme est un autre problème). Le CocoaAsyncSocket est fantastique. Il semble que beaucoup de gens l'aient utilisé pour la diffusion TCP et la communication.

Voici quelques étapes de mon travail:

  • Je tournai ma « contrôleur » iPod pour ouvrir une connexion avec un port.
  • Dans mes « clients » des applications iPod, je les ai connecter au « contrôleur » en tant que hôte en utilisant l'adresse IP statique
  • J'envoie ensuite les commandes aux clients et à faire diverses choses en fonction de la commande

Est-ce que quelqu'un a réussi à communiquer avec plusieurs iPod dans un réseau local? Je serais intéressé de voir comment vous avez accompli cela.

Bonne codage

Questions connexes