在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];
有人可以解释NSNetService
和GCDAsyncSocket
之间的区别吗?
对我来说,似乎我在同一个端口上创建了两个套接字。特别是因为你可以创建输入&来自NSNetService
的输出流。
[service getInputStream:&input outputStream:&output];
答案 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协议)。