当前位置:   article > 正文

ios App 发送广播失败解决

ios App 发送广播失败解决

记录开发 ios App 使用 c++ 混编时遇到的问题:

开发环境

macOS Sonoma(最新版本14.3.1)

Xcode Version 15.2

ipadOS(最新版本17.3.1)

问题:在mac 上 和 ipad上测试,当 udp 发送广播,地址为 255.255.255.255 时 send失败,wireshark 抓包没有发送出去,改成单播地址就可以发成功。没更新ipad前 ios 15 上是可以发广播的,怀疑是升级到17后 安全性提高了?在网上搜说需要 申请组播广播权限,c++伪代码:

  1. int port=0;
  2. WHUDP *wh =new WHUDP();
  3. wh->ServerInit("0.0.0.0", port);
  4. whls.push_back(wh);
  5. //发送
  6. for(int i=0;i<whls.size();i++){
  7. whls[i]->sendcmd("255.255.255.255", serverport,cmd);
  8. }
  9. void WHUDP::ServerInit(const char *loaclip,int localport) //用于广播
  10. {
  11. CreateSocket();
  12. uport = localport;
  13. //设置非阻塞
  14. setnonblocking( usock ,1);
  15. if (setbroadcast( usock ,1)<0) //if (::setsockopt( usock , SOL_SOCKET, SO_BROADCAST, (char FAR*)&opt, sizeof(opt)) <0)
  16. {
  17. debug_printf("setsockopt SO_BROADCAST failed ! [%ld]\n", GetLastErrorCode());
  18. ShutAndClose( usock );
  19. return ;
  20. }
  21. if (setreuseaddr( usock ,1)<0) //if (::setsockopt( usock , SOL_SOCKET, SO_REUSEADDR, (char FAR*)&opt1, sizeof(opt1)) <0)
  22. {
  23. debug_printf("setsockopt SO_REUSEADDR failed ! [%ld]\n", GetLastErrorCode());
  24. ShutAndClose( usock );
  25. return ;
  26. }
  27. if (false == BindAddrPort( loaclip , uport))
  28. {
  29. //cout << "bind error :" << GetLastError() <<endl;
  30. ShutAndClose( usock );
  31. }
  32. }
  33. void WHUDP::sendcmd(const char *ip, unsigned short remoteport,char * cmd)
  34. {
  35. char szMsg[1024]={0};
  36. strcpy(szMsg, cmd);
  37. //int nRet = ::sendto( usock , szMsg, 50, 0, (sockaddr*)&m_toAddr, sizeof(m_toAddr));
  38. int nRet =Send(szMsg,50,"255.255.255.255",remoteport);
  39. if (nRet <=0)
  40. {
  41. debug_printf("sendcmd sendto() failed ! [%ld]\n", GetLastErrorCode());
  42. }
  43. debug_printf("ok...\n");
  44. }

解决:根据下面网站填写申请

https://developer.apple.com/contact/request/networking-multicast

等待邮件回复,通过后登录苹果开发者中心 查看证书修改,之前我没有申请过 证书就没有 Additional Capabilities 没有这一项,xcode 也没有 Multicast Networking ,现在有了 需要证书 和 xcode配置一下,广播地址255.255.255.255就可以发送成功了

证书勾选保存

 xcode

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/206210?site
推荐阅读
相关标签
  

闽ICP备14008679号