GCDAsyncUdpSocket 使用时出现错误 Domain=NSPOSIXErrorDomain Code=13 "Permission denied"

完整的错误描述为:

Domain=NSPOSIXErrorDomain Code=13 "Permission denied" UserInfo={NSLocalizedDescription=Permission denied, NSLocalizedFailureReason=Error in send() function.}


原始代码是这样的:

clientBroadcastSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:queue socketQueue:nil];
            [clientBroadcastSocket enableBroadcast:YES error:nil];
            [clientBroadcastSocket bindToPort:BROADCASTPORT error:nil];
            NSLog(@"发送中的广播 localPort:%@", @(clientBroadcastSocket.localPort));
            [clientBroadcastSocket sendData:data toHost:BROADCASTHOST port:BROADCASTPORT withTimeout:10 tag:100];

看似没有什么错误开启了广播也绑定了端口。

实际上,绑定端口需要放在开启广播之前,即需要先 bindToPort 再 enableBroadcast。

修改后的代码:

clientBroadcastSocket = [[GCDAsyncUdpSocket alloc] initWithDelegate:self delegateQueue:queue socketQueue:nil];
            // enableBroadcast 要放在 bindToPort 后才可以
            [clientBroadcastSocket bindToPort:BROADCASTPORT error:nil];
            [clientBroadcastSocket enableBroadcast:YES error:nil];
            NSLog(@"发送中的广播 localPort:%@", @(clientBroadcastSocket.localPort));
            [clientBroadcastSocket sendData:data toHost:BROADCASTHOST port:BROADCASTPORT withTimeout:10 tag:100];



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值