我一直在尝试使用5个iPod通过蓝牙创建一个简单的客户端/服务器网络。一个iPod将发送基本字符串,如“停止”或“转到”四个iPod,然后在收到命令时会执行各种操作。我目前正在使用GameKit 而没有 PeerPicker,即使启动连接也不可靠且复杂。连接后,我可以在两个设备之间发送数据,但不能更多。
我希望能够在没有网络(如遥控器)的情况下从iPod“服务器”向iPod“客户端”播放简单的短消息。我看过很多例子,包括坦克和wiTap的例子,但我很惊讶没有网络就没那么简单了。
以下是我开始连接的方式:
- (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;
}
}
麻烦的是didChangeState方法在好的和准备好时触发,并且行为是不可预测的。也许这是蓝牙或GameKit的问题,但我想在没有其他iPod“授权”连接的情况下进行连接。这可能吗?
认为我需要一台路由器和一个网络来实现这么简单的事情吗?
谢谢
答案 0 :(得分:0)
我做了很多研究,我决定使用一个小的5V无线接入点来建立我的多个iPod通信系统。 GameKit的东西很适合两个iPod互相交谈,但它不是很可靠(范围是另一个问题)。 CocoaAsyncSocket太棒了。似乎这里有很多人用它来进行TCP广播和通信。
以下是我采取的一些步骤:
有没有人在本地网络中与多个iPod通信有什么成功?我很想知道你是如何完成这件事的。
快乐编码