2010-12-27 3 views
0

私は、5つのiPodを使ってBluetooth経由で簡単なクライアント/サーバーネットワークを作成しようとしています。 1つのiPodは4つのiPodに "停止"または "行く"のような基本的な文字列を送信し、コマンドを受信するとさまざまな処理を行います。私は現在 PeerPickerなしでGameKit を使用しており、接続を開始することさえ信頼できず、複雑です。一度接続すれば、2つのデバイス間でデータを送信できますが、それ以上のデータは送信できません。iPhoneクライアント/サーバーメッセージブロードキャスト

iPodの「クライアント」にiPodの「サーバー」からネットワークなしで(リモコンのように)簡単な短いメッセージをブロードキャストできるようにしたい。私は戦車やwiTapの例を含め、数多くの例を見てきましたが、ネットワークを必要とせずに何も簡単ではないことに驚いています。それは良いと準備ができたときにトラブルがそのdidChangeState方法火災で

- (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; 
} 

そして、私は、デリゲートにdidChangeStateとの接続を処理

- (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; 
    } 
} 

:ここ

は、私が接続を開始する方法です、その動作は予測できません。 BluetoothやGameKitに問題があるかもしれないが、私は接続を「許可」している他のiPodなしで接続したいと思う。これは可能ですか?

私はルータとネットワークが必要なのでしょうか?

は、私は多くの研究を行なったし、私は複数のiPodの通信システムを確立するために、少し5Vワイヤレスアクセスポイントを使用することを決めたあなたに

答えて

0

ありがとうございます。 GameKitのものは、お互いに話している2つのiPodには最適ですが、それはあまり信頼性がありません(そして範囲も別の問題です)。 CocoaAsyncSocketは素晴らしいです。ここでは、多くの人がTCPのブロードキャストと通信にこれを使用しているようです。

は、ここで私が撮ったいくつかの手順は次のとおりです。

  • は、私は私の「コントローラ」iPodはポートとの接続を開くように設定します。私の「クライアント」のiPodのアプリで
  • 、私はその後、クライアントにコマンドを送信し、コマンドに応じて様々なものを行う彼らは、静的IP
  • を使用して、ホストとして、「コントローラ」に接続してい

ローカルネットワーク内の複数のiPodと通信することに成功した人はいますか?私はあなたがこれをどのように達成したかを見るのに興味があります。

ハッピーコーディング