我想使用GKSession连接两个设备,一个作为服务器启动,另一个作为客户端启动.使用此配置,我无法使用GKPeerPickerController.
我在连接两台设备时遇到问题:
在接口文件中我有
GKSessionDelegate
GKSession *session;
Run Code Online (Sandbox Code Playgroud)
在实现中,我使用以下代码启动服务器:
session = [[GKSession alloc] initWithSessionID:@"iFood" displayName:nil sessionMode:GKSessionModeClient];
session.delegate = self;
session.available = YES;
Run Code Online (Sandbox Code Playgroud)
客户端开始使用此代码:
session = [[GKSession alloc] initWithSessionID:@"iFood" displayName:nil sessionMode:GKSessionModeServer];
session.delegate = self;
session.available = YES;
Run Code Online (Sandbox Code Playgroud)
我如何强制使用蓝牙而不是WiFi?
我也实现了这些调用:
-(void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString *)peerID {
NSLog(@"Someone is trying to connect");
}
- (BOOL)acceptConnectionFromPeer:(NSString *)peerID error:(NSError **)error {
NSLog(@"acceptConnectionFromPeer");
}
Run Code Online (Sandbox Code Playgroud)
当我开始时,我将其纳入调试器:
Listening on port 50775
2010-02-19 14:55:02.547 iFood[3009:5103] handleEvents started (2)
Run Code Online (Sandbox Code Playgroud)
当其他设备开始查找时,我得到了这个:
~ DNSServiceBrowse callback: Ref=187f70, Flags=2, IFIndex=2 (name=[en0]), ErrorType=0 name=00eGs1R1A..Only by Audi regtype=_2c3mugr67ej6j7._udp. domain=local.
~ DNSServiceQueryRecord callback: Ref=17bd40, Flags=2, IFIndex=2 (name=[en0]), ErrorType=0 fullname=00eGs1R1A\.\.Only\032by\032Audi._2c3mugr67ej6j7._udp.local. rrtype=16 rrclass=1 rdlen=18 ttl=4500
** peer 1527211048: oldbusy=0, newbusy=0
~ DNSServiceBrowse callback: Ref=187f70, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 name=00eGs1R1A..Only by Audi regtype=_2c3mugr67ej6j7._udp. domain=local.
GKPeer[186960] 1527211048 service count old=1 new=2
~ DNSServiceQueryRecord callback: Ref=17bd40, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 fullname=00egs1r1a\.\.only\032by\032audi._2c3mugr67ej6j7._udp.local. rrtype=16 rrclass=1 rdlen=18 ttl=7200
** peer 1527211048: oldbusy=0, newbusy=0
~ DNSServiceBrowse callback: Ref=187f70, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 name=00TF5kc1A..Only by Audi regtype=_2c3mugr67ej6j7._udp. domain=local.
~ DNSServiceQueryRecord callback: Ref=188320, Flags=2, IFIndex=-3 (name=[]), ErrorType=0 fullname=00tf5kc1a\.\.only\032by\032audi._2c3mugr67ej6j7._udp.local. rrtype=16 rrclass=1 rdlen=18 ttl=7200
** peer 1723356125: oldbusy=0, newbusy=0
~ DNSServiceQueryRecord callback: Ref=188320, Flags=2, IFIndex=2 (name=[en0]), ErrorType=0 fullname=00TF5kc1A\.\.Only\032by\032Audi._2c3mugr67ej6j7._udp.local. rrtype=16 rrclass=1 rdlen=18 ttl=4500
** peer 1723356125: oldbusy=0, newbusy=0
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
我确信这两款设备都支持蓝牙并连接到同一个WiFi.
谢谢,
河
小智 -1
我遇到了类似的问题,但从上面的描述我认为你犯了一些错误:
GKSession仅实现BT;如果您使用选择器,那么您可以提供单独的方法来处理 WiFi 连接。
“didReceiveConnectionRequestFromPeer”方法应调用会话对象上的“acceptConnectionFromPeer”方法——您无需在委托上实现“acceptConnectionFromPeer”。
为了进行调试,您应该在委托方法“session:peer:didChangeState:”中记录状态更改(请参阅http://developer.apple.com/iPhone/library/documentation/GameKit/Reference/GKSessionDelegate_Protocol/Reference/Reference.html) 。当对等点“可用”时,您可以调用“connectToPeer:”;当“已连接”时,您可以使用“sendData:toPeers:”。
对于建立连接后的 IO,您希望在会话上调用“setDataReceiveHandler:withContext:”方法。
早些时候,我的代码中有一些拼写错误,但现在可以正常工作了。
祝你好运。
| 归档时间: |
|
| 查看次数: |
4616 次 |
| 最近记录: |