1

GameKitは使いたくない。dns_sd.hやDNSServiceRegisterなどのメソッドを使用して、接続を確立および維持するための低レベルのアプローチを使用しようとしています。ただし、HHServicesと呼ばれるこのラッパーを見つけました...正直なところ、この時点で、dns_sdを使用した低レベルの回答またはHHServicesを使用した高レベルの回答のいずれかを歓迎します。

これがHHServicesです。これがGCDAsyncSocketです。

これは私がこれまでに持っているコードです。HHServiceとGCDAsyncSocketを正常に公開し、他のデバイスでHHServicesのブローを開始することはできますが、接続が確立されていません。何か助けはありますか?:D

サーバ側

HHServiceを公開する場所は次のとおりです。

//....
NSUInteger serverPort = 19997;
HHServicePublisher *publisher = [[HHServicePublisher alloc] initWithName:@"MyDisplayName" type:@"_myexampleservice._tcp." domain:@"local." txtData:nil port:serverPort];

GCDAsyncSocket *listenSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

NSError *error = nil;
if (![listenSocket acceptOnPort:serverPort error:&error])
{
    [self alert:@"Error starting GCDAsyncsocket"];
}


publisher.delegate = self;
if(![publisher beginPublish])
{
    [self alert:@"Error publishing HHService"];
}
else
{
    [self alert:@"Successfully published HHService"];
}

これは、クライアントが接続したかどうかを確認する場所です。

- (void)socket:(GCDAsyncSocket *)sender didAcceptNewSocket:(GCDAsyncSocket *)newSocket
{
    [self alert:@"didAcceptNewSocket!"];
}

クライアント側

ブラウジングを開始する場所

    HHServiceBrowser *browser = [[HHServiceBrowser alloc] initWithType:@"_myexampleservice._tcp." domain:@"local."];
    browser.delegate = self;
    if(![browser beginBrowse])
    {
        [self alert:@"Couldn't start browsing"];
    }
    else
    {
        [self alert:@"Successfully started browsing"];
    }

公開されたHHServiceを見つけるためのコールバック:

- (void) serviceBrowser:(HHServiceBrowser*)serviceBrowser didFindService:(HHService*)service moreComing:(BOOL)moreComing {
    [self alert:@"Found a service! "];
}

誰かが私が間違っていることについていくつかの光を当てることができますか?

4

2 に答える 2

0

HHServicesは検出のみを処理します。接続するのはあなた次第です。HHServicesの例に示されているように、サービスを解決してからソケットを開く必要があります。

于 2013-01-23T11:09:32.203 に答える
0

browser私は自分のオブジェクトを保持していなかったことがわかりました。

于 2013-01-30T09:55:32.700 に答える