我的问题显然是2例:
我知道Reachability
实用程序(Apple的代码和AFNetworking / Alamofire代码)和allowsCellularAccess
属性(在NSMutableURLRequest和NSURLSessionConfiguration中)。
但这些只解决了案例(1)(因为我将allowsCellularAccess
设置为NO)。
情况(2)未得到保证,因为请求可以通过蜂窝或wifi(如果可用)运行。即使我仅通过可达性检查蜂窝状态,仍有一些异常情况,如本文档中所述Restrict Cellular Networking Correctly
有没有更好的方法来确保蜂窝网络?任何建议都欢迎。 Object-C和Swift都受到欢迎。
先谢谢!
答案 0 :(得分:2)
的
的struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
NSInteger success = getifaddrs(&interfaces);
if (success == 0) {
// Loop through linked list of interfaces
temp_addr = interfaces;
while(temp_addr != NULL) {
if(temp_addr->ifa_addr->sa_family == AF_INET) {
// Get NSString from C String
NSString* ifaName = [NSString stringWithUTF8String:temp_addr->ifa_name];
NSString* address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *) temp_addr->ifa_addr)->sin_addr)];
NSString* mask = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *) temp_addr->ifa_netmask)->sin_addr)];
NSString* gateway = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *) temp_addr->ifa_dstaddr)->sin_addr)];
NSLog(@"%@;%@;%@;%@",ifaName,address,mask,gateway);
}
temp_addr = temp_addr->ifa_next;
}
}
的
然后你会看到这样的输出:
lo0的; 127.0.0.1; 255.0.0.0; 127.0.0.1
pdp_ip0; 10.9.163.185; 255.255.255.255; 10.9.163.185
EN0; 10.0.0.6; 255.255.0.0; 10.0.255.255
的
(“pdp_ip0”表示纤维素界面)
的
的int s = socket(AF_INET, SOCK_STREAM, 0);
int index = if_nametoindex( "pdp_ip0");
int suc = setsockopt(s, IPPROTO_IP, IP_BOUND_IF, &index, sizeof(index));
的
然后连接套接字,您将看到已通过蜂窝接口连接服务器