Ios NSNetService:发布服务时处理名称冲突

Ios NSNetService:发布服务时处理名称冲突,ios,bonjour,nsnetservice,Ios,Bonjour,Nsnetservice,根据苹果公司的说法: 如果该服务名称与网络上的现有服务冲突,Bonjour将选择一个新名称。。。如果您的服务与网络上现有服务的名称冲突,则会自动重命名该服务 如何实现此功能 我的实施: self.publishService = [[NSNetService alloc] initWithDomain:@"local." type:@"_http._tcp." name:@"MyName" port:80]; self.publishService.delegate = self; [self.

根据苹果公司的说法:

如果该服务名称与网络上的现有服务冲突,Bonjour将选择一个新名称。。。如果您的服务与网络上现有服务的名称冲突,则会自动重命名该服务

如何实现此功能

我的实施:

self.publishService = [[NSNetService alloc] initWithDomain:@"local." type:@"_http._tcp." name:@"MyName" port:80];
self.publishService.delegate = self;
[self.publishService publish];

- (void)netServiceDidPublish:(NSNetService *)sender {
    NSLog(@"did publish: %@", sender.name);
}

- (void)netService:(NSNetService *)sender didNotPublish:(NSDictionary *)errorDict {
    NSLog(@"did not publish: %@", errorDict);
}
当此服务已发布时,将调用
didNotPublish
委托方法。我想这项服务不会发布


我认为应该为具有新名称的服务再次调用
netserviceddpublish:
delegate方法,但事实并非如此。

这里的问题是端口,而不是名称

如果存在名称冲突,它会自动重命名服务,方法是在名称后附加
“(2)”
,尽可能增加所需的数量。在这种情况下,它将成功发布并调用
netservicedippublish:


如果端口已被另一个已发布的服务使用,它将不会发布它,并将调用
netService:didNotPublish:
,错误字典设置为
NSNetServicesErrorCode=48;NSNetServicesErrorDomain=1

谢谢!创建NSNetService实例时,我将端口更改为0:
self.publishService=[[NSNetService alloc]initWithDomain:@“local”。类型:self.serviceIdentifier名称:self.bonjourName端口:0]。我还必须将发布方法更改为
[self.publishService publishWithOptions:NSNetServiceListenForConnections]