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

原来我没有保留我的browser对象。

于 2013-01-30T09:55:32.700 回答
0

HHServices 只处理发现。建立联系取决于您。您需要解析服务,然后打开一个套接字,如 HHServices 示例中所示。

于 2013-01-23T11:09:32.203 回答