【发布时间】:2015-11-08 00:41:30
【问题描述】:
我有一台在本地运行的服务器(我的 IP 是 192.168.0.98),并且一直在尝试使用一些网络代码来访问它。最初这是通过 AFNetworking 完成的,但我现在使用 NSURLSession 完成了它,如下所示:
NSURLSession *session = [NSURLSession sharedSession];
NSURL *url = [NSURL URLWithString:@"http://192.168.0.98:8080/api"];
NSURLSessionDataTask *task = [session dataTaskWithURL: url
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"Error: %@", error);
NSLog(@"Body: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}];
[task resume];
然后我用这 3 个 URL 运行它:
-
http://localhost:8080/api-> 有效。 -
http://127.0.0.1:8080/api-> 有效。 -
http://192.168.0.98:8080/api-> 失败并出现错误:Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" UserInfo={ NSErrorFailingURLStringKey=http://192.168.0.98:8080/api, NSErrorFailingURLKey=http://192.168.0.98:8080api, _kCFStreamErrorCodeKey=2, _kCFStreamErrorDomainKey=1 }
其中 192.168.0.98 是分配给这台机器的 IP。如果我从 PAW 或浏览器运行这些 URL,它就可以正常工作。但是从单元测试来看它失败了。
从我的项目的角度来看,我可以使用localhost。所以这不是一个交易破坏者。但我很好奇为什么它不起作用。
有人知道问题可能是什么吗?
【问题讨论】:
-
猜测是因为无法访问该主机或没有进程在该地址的 8080 端口上侦听
-
确实;您是否使用
telnet或netcat或命令行中的其他内容对此进行了测试? -
我已经使用 REST 客户端对此进行了测试,所有 URL 都可以。 192.168.0.98其实就是这台机器。跟踪路由显示 192.168.0.98、localhost 和 127.0.0.1 的相同路由。只有 AfNetworking 对此有问题。
-
顺便说一句,自从我安装 El Capitan(昨天)后它就开始失败了
-
经过更多测试,它只发生在 iOS 9 和 tvOS 9 上,而不是在 iOS 8 模拟器上。
标签: ios networking nsurlsession