4

在 iOS 上,我使用 bonjour 来查找其他设备,以便在两者之间传输数据。我打算将 NSNetService 用于 bonjour,将 CocoaAsyncSocket 用于流式传输。

这个例子中,他们在同一个端口上创建了一个 GCDAsyncSocket 和一个 NSNetService :

socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[socket acceptOnPort:0 error:NULL];

netService = [[NSNetService alloc] initWithDomain:@"local." type:@"_YourServiceName._tcp." name:@"" port:socket.localPort];

NSNetService有人可以解释和之间的区别GCDAsyncSocket吗?

对我来说,好像我在同一个端口上创建了两个套接字。特别是因为您可以从NSNetService.

[service getInputStream:&input outputStream:&output];
4

1 回答 1

4

GCDAsyncSocket用于创建监听服务器套接字:

socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
[socket acceptOnPort:0 error:NULL];

端口号设置为 0,这意味着操作系统选择了一个可用端口。

socket.localPort

是操作系统选择的端口号,然后套接字正在侦听。

NSNetService用于通过 Bonjour发布服务:

netService = [[NSNetService alloc] initWithDomain:@"local." type:@"_YourServiceName._tcp." name:@"" port:socket.localPort];
[netService setDelegate:self];
[netService publish];

这不会创建另一个套接字,而是将创建的端口号与主机名和服务名一起使用,并在本地网络中发布此信息(使用 Bonjour/mDNS 协议)。

于 2013-05-21T19:40:59.667 回答