iOS udp发送数据

25 篇文章 0 订阅


-(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




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI视觉网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值