iOS udp发送数据

举报
风吹稻花香 发表于 2021/06/05 01:02:11 2021/06/05
【摘要】 -(void) sendStartCmd:(int)newValue{         sockfd =socket(AF_INET,SOCK_DGRAM,0);     if(sockfd <0) {         NSLog...


-(void) sendStartCmd:(int)newValue{    


    sockfd =socket(AF_INET,SOCK_DGRAM,0);

    if(sockfd <0) {

        NSLog(@"creat client socket fail\n");

        return;

    }

    structsockaddr_in servaddr;

    

    bzero(&servaddr,sizeof(servaddr));

   // servaddr.sin_family = AF_INET;

    servaddr.sin_port =htons(5131);

    servaddr.sin_addr.s_addr =inet_addr("192.168.1.100");

    char sendline[10]={'\0','\0'} ;

    sprintf(sendline,"%d",newValue);

   // sendto(sockfd, sendline, 10, 0, (struct sockaddr *)&servaddr, sizeof(servaddr));

    

    

    char buffer[256] =" 000";

    bzero(buffer,sizeof(buffer));

    sprintf(buffer,"%s","000");


    int len =sendto(sockfd, buffer,sizeof(buffer),0, (structsockaddr *)&servaddr,sizeof(servaddr));

    

    if (len >0) {

        NSLog(@"发送成功");

    } else {

        fprintf(stderr,"发送失败 failed: %d %s\n",errno,strerror(errno));

    }

    

    av_log(NULL,AV_LOG_ERROR,"send info-> %d length:%d \n",newValue,strlen(sendline));

    close(sockfd);

}

发送失败 failed: 65 No route to host


iPhone设置网络权限:

iphone6s 上每个app有网络权限控制,在设置最下面的列表里面,选中一个app,右键头里面有选择app的网络权限。

ios踩过的坑:

app需要上网的话,启动时候最好弹出框提示用户添加网络权限。

从iOS10之前带过来的应用应该不会发生类似问题。在iOS10下新下载的应用,有的时候首次打开,会提示网络使用权限,但是有的时候,没有提示就直接可以使用了。并不是这样就没问题了,接下来才是最蛋疼的。有部分概率在下次打开的时候网络权限直接默认禁掉了。

解决方法:

我想到的也是比较傻白甜的方法。查阅了系统api,并没有找到网络权限申请的方法。于是想到了跳转到自己应用下去设置权限。

[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:UIApplicationOpenSettingsURLString]];

不过这个时候又出现另外一个蛋疼的bug。应用不会显示在系统设置的列表中。换句话说,你没有机会去更改他的网络权限。由于不存在于设置列表中,所以执行上面那段代码铁定是崩溃的。

接下来就是解决这个问题了,尝试了各种方法试着让他出现在系统设置列表中。尝试结果发现,当应用请求任何一种系统权限(例如通知,麦克风,定位等)的时候,他会出现在系统列表中。接下来再去执行上面的跳转代码设置应用的网络权限。

权限以及相关设置

我们需要打开info.plist文件添加相应权限的说明,否则程序在iOS10上会出现崩溃。
具体如下图:


QQ20160914-0.png

注意,添加的时候,末尾不要有空格
麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风?
相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机?
相册权限: Privacy - Photo Library Usage Description 是否允许此App访问你的媒体资料库?通讯录权限: Privacy - Contacts Usage Description 是否允许此App访问你的通讯录?
蓝牙权限:Privacy - Bluetooth Peripheral Usage Description 是否许允此App使用蓝牙?

语音转文字权限:Privacy - Speech Recognition Usage Description 是否允许此App使用语音识别?
日历权限:Privacy - Calendars Usage Description 是否允许此App使用日历?

定位权限:Privacy - Location When In Use Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据
定位权限: Privacy - Location Always Usage Description 我们需要通过您的地理位置信息获取您周边的相关数据
定位的需要这么写,防止上架被拒。

<!-- 相册 --> 

<key>NSPhotoLibraryUsageDescription</key> 

<string>App需要您的同意,才能访问相册</string> 

<!-- 相机 --> 

<key>NSCameraUsageDescription</key> 

<string>App需要您的同意,才能访问相机</string> 

<!-- 麦克风 --> 

<key>NSMicrophoneUsageDescription</key> 

<string>App需要您的同意,才能访问麦克风</string> 

<!-- 位置 --> 

<key>NSLocationUsageDescription</key> 

<string>App需要您的同意,才能访问位置</string> 

<!-- 在使用期间访问位置 --> 

<key>NSLocationWhenInUseUsageDescription</key> 

<string>App需要您的同意,才能在使用期间访问位置</string> 

<!-- 始终访问位置 --> 

<key>NSLocationAlwaysUsageDescription</key> 

<string>App需要您的同意,才能始终访问位置</string> 

<!-- 日历 --> 

<key>NSCalendarsUsageDescription</key> 

<string>App需要您的同意,才能访问日历</string> 

<!-- 提醒事项 --> 

<key>NSRemindersUsageDescription</key> 

<string>App需要您的同意,才能访问提醒事项</string> 

<!-- 运动与健身 --> 

<key>NSMotionUsageDescription</key> <string>App需要您的同意,才能访问运动与健身</string> 

<!-- 健康更新 --> 

<key>NSHealthUpdateUsageDescription</key> 

<string>App需要您的同意,才能访问健康更新 </string> 

<!-- 健康分享 --> 

<key>NSHealthShareUsageDescription</key> 

<string>App需要您的同意,才能访问健康分享</string> 

<!-- 蓝牙 --> 

<key>NSBluetoothPeripheralUsageDescription</key> 

<string>App需要您的同意,才能访问蓝牙</string> 

<!-- 媒体资料库 --> 

<key>NSAppleMusicUsageDescription</key> 

<string>App需要您的同意,才能访问媒体资料库</string>


iOS9 HTTP 不能正常使用的解决办法

今天升级Xcode 7.0 bata发现网络访问失败。
输出错误信息

The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.
 

Google后查证,iOS9引入了新特性App Transport Security (ATS)。详情:App Transport Security (ATS)

新特性要求App内访问的网络必须使用HTTPS协议。
但是现在公司的项目使用的是HTTP协议,使用私有加密方式保证数据安全。现在也不能马上改成HTTPS协议传输。

最终找到以下解决办法:

  1. 在Info.plist中添加NSAppTransportSecurity类型Dictionary

  2. NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES




文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/54931707

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。