iOS udp发送数据
-(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上会出现崩溃。
具体如下图:
注意,添加的时候,末尾不要有空格
麦克风权限: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
协议传输。
最终找到以下解决办法:
-
在Info.plist中添加
NSAppTransportSecurity
类型Dictionary
。 -
在
NSAppTransportSecurity
下添加NSAllowsArbitraryLoads
类型Boolean
,值设为YES
文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/54931707
- 点赞
- 收藏
- 关注作者
评论(0)