Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 尝试使用分配的IP而不是本地主机或主机时,NSURLSession失败_Ios_Networking_Nsurlsession - Fatal编程技术网

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

Ios 尝试使用分配的IP而不是本地主机或主机时,NSURLSession失败,ios,networking,nsurlsession,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 *tas

我有一台本地运行的服务器(我的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。如果我从浏览器或浏览器运行这些URL,它就可以正常工作。但从单元测试来看,它失败了

从我的项目的角度来看,我可以使用
localhost
。所以这不是一个交易破坏者。但我很好奇为什么它不起作用

有人知道问题出在哪里吗

tl;dr:使用域名而不是IP地址

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


我不确定为什么使用实际的IP地址不起作用,但这可能会给您一个适合您需要的选项。

猜测一下,因为无法访问该主机,或者该地址上的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模拟器上发生。
sudo scutil--get LocalHostName
将在url中提供您的本地名称:http://
LocalHostName
。local local/