如何在局域网中的 GCDAsyncUdpSocket 与广播
发布网友
发布时间:2022-04-30 05:22
我来回答
共1个回答
热心网友
时间:2023-05-21 21:40
我想要发现是否正在侦听特定端口,与GCDAsyncUdpSocket未知的 IP 地址与局域网中的服务器。我将广播在局域网中,一些消息,如果服务器存在,它将反馈消息,然后我会知道服务器的 IP 地址。
现在我试着使用下面的代码来做这项工作:
udpSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
if (![udpSocket bindToPort:18686 error:&error])
{
[self logError:FORMAT(@"Error binding: %@", error)];
return;
}
if (![udpSocket beginReceiving:&error])
{
[self logError:FORMAT(@"Error receiving: %@", error)];
return;
}
NSString *host = @"192.168.2.139"; // server IP i know
int port = 8585;
NSString *message = @"Hello";
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
[udpSocket sendData:data toHost:host port:port withTimeout:-1 tag:tag];
如果我将主机的 IP 设置为服务器的 IP,其所有权利,服务器将响应。但我想要广播找到的服务器 IP,和我试着用"192.168.2.0","192.168.2.1","192.168.2.255","255.255.255.255",所有上述地址不可以广播。
我想知道我可以使用 192.168.2.*,与广播在局域网中的 IP 地址和广播如果哪个 IP 地址不知道局域网 IP 域吗?任何帮助将不胜感激。
解决方法 1:
我检查了 GCDAsyncUdpSocket.h 和找到命名的函数 - (BOOL)enableBroadcast:(BOOL)flag error:(NSError **)errPtr; 向 setupSocket 添加以下
if (![udpSocket enableBroadcast:YES error:&error]) {
[self logError:FORMAT(@"Error enableBroadcast:%@",error)];
return;
}