我的问题显然是2种情况:
我知道 Reachability
实用程序(Apple 的代码和 AFNetworking/Alamofire 代码)和 allowsCellularAccess
属性(在 NSMutableURLRequest 和 NSURLSessionConfiguration 中)。
但这些仅解决了情况 (1)(因为我将 allowsCellularAccess
设置为 NO)。
情况 (2) 不能保证,因为请求可以通过蜂窝或 wifi(如果可用)运行。即使我仅通过蜂窝网络的可达性检查状态,仍然存在一些异常情况,如本文档 Restrict Cellular Networking Correctly 中所述
有没有更好的方法来确保仅限蜂窝网络?欢迎任何建议。 Object-C 和 Swift 都受到欢迎。
提前致谢!
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”表示手机接口(interface))
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));
然后连接socket,你会看到你已经通过蜂窝接口(interface)连接了服务器
关于iOS 如何仅通过蜂窝网络正确发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38603432/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |