NSNetService和GCDAsynSocket之间有什么区别?

时间:2013-05-21 18:52:24

标签: ios objective-c bonjour cocoaasyncsocket

在iOS上,我正在使用bonjour查找其他设备,以便我可以在两者之间传输数据。我计划使用NSNetService进行bonjour,使用CocoaAsyncSocket进行流式传输。

this example中,他们在相同端口上创建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];

有人可以解释NSNetServiceGCDAsyncSocket之间的区别吗?

对我来说,似乎我在同一个端口上创建了两个套接字。特别是因为你可以创建输入&来自NSNetService的输出流。

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

1 个答案:

答案 0 :(得分:3)

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协议)。