尝试使用分配的IP而不是本地主机或主目录时,NSURLSession失败

NSURLSession fails when attempting to us assigned IP instead of localhost or home(尝试使用分配的IP而不是本地主机或主目录时,NSURLSession失败)
本文介绍了尝试使用分配的IP而不是本地主机或主目录时,NSURLSession失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一台本地运行的服务器(我的IP是192.168.0.98),并且一直在尝试使用一些网络代码来访问它。最初这是通过AFNetking完成的,但现在我使用了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地址不起作用,但这可能会为您提供一个可以满足您需要的选项。

这篇关于尝试使用分配的IP而不是本地主机或主目录时,NSURLSession失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Why local notification is not firing for UNCalendarNotificationTrigger(为什么没有为UNCalendarNotificationTrigger触发本地通知)
iOS VoiceOver functionality changes with Bundle Identifier(IOS画外音功能随捆绑包标识符而变化)
tabbar middle tab out of tabbar corner(选项卡栏中间的选项卡角外)
Pushing UIViewController above UITabBar(将UIView控制器推送到UITabBar上方)
Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?(Android+core LibraryDesugering:我可以期待哪些Java 11API能够工作?)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)