ios - NSURLSession 在尝试向我们分配 IP 而不是 localhost 或 home 时失败

标签 ios networking nsurlsession

我有一个本地运行的服务器(我的 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。所以这不是一个交易破坏者。但我很好奇为什么它不起作用。

有人知道问题出在哪里吗?

最佳答案

tl;dr:使用你的 Bonjour local link域名而不是您的 IP 地址。

我自己也遇到了这个问题。我正在本地构建 API,还不想部署到外部服务器,但我需要从模拟器和设备调用 API。我首先尝试使用本地主机,但当然这不适用于设备,因为本地主机将是设备本身,而不是我的 Mac。 IP 地址适用于设备,但不适用于模拟器。然后我想起我可以使用我的 Mac 的 .local 域名来实现其他网络寻址能力,果然它有效。我可以使用 http://mymac.local/ 作为我在模拟器和测试设备上的 API 请求的基本 URL。

我不确定为什么使用实际 IP 地址不起作用,但这可能会为您提供满足您需求的选项。

关于ios - NSURLSession 在尝试向我们分配 IP 而不是 localhost 或 home 时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32732924/

相关文章:

iphone - iOS 5.0 respondsToSelector 在 NSOperation 中总是返回 false

python - Jinja2 网络自动化 - 增加一个变量(子网+1)

java - 将 Java 控制台输出(逐行)保存到不同的变量中?

ios - 如何在 iOS 应用程序中暂停和恢复上传过程?

swift - 如何在swift中的for循环中使用异步任务

objective-c - 警告 ASIHttpRequest

ios - 有没有办法在收到推送通知后唤醒 iOS 应用程序,即使它已被杀死

iOS 自定义 UItableView 标题

消息传递的java网络编程协调

具有后台多任务处理且无 APNS 的 iOS7 文本聊天应用程序