如何使用GCDAsyncUdpSocket在局域网中广播?

 双语的家_352 发布于 2023-02-12 18:34

我想通过GCDAsyncUdpSocket发现是否有一个服务器正在侦听具有未知IP地址的LAN中的特定端口.我将在局域网中广播一些消息,如果服务器存在,它将反馈消息,然后我将知道服务器的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",以上所有地址都不能广播.

我想知道哪个IP地址可用于在192.168.2.*中在LAN中广播,如果不知道LAN IP域,那么要广播哪个IP地址?任何帮助将不胜感激.

1 个回答
  • 我查了一下GCDAsyncUdpSocket.h,找到了名为- (BOOL)enableBroadcast:(BOOL)flag error:(NSError **)errPtr; I 的函数,将以下内容添加到setupSocket中

    if (![udpSocket enableBroadcast:YES error:&error]) {
            [self logError:FORMAT(@"Error enableBroadcast:%@",error)];
            return;
    }
    

    广播工作......

    在我的问题上,我检查了192.168.2.*LAN广播IP是192.168.2.255,未知的LAN广播IP是255.255.255.255.

    我不知道为什么我们需要在GCDAsyncUdpSocket中启用广播来使用广播IP.希望有一天这会有所帮助.

    2023-02-12 18:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有