2011-06-09 28 views
2

我看过其他相关的问题,但没有一个给我正确的做法。如何检查主机的网络服务

我需要检查我的主机可用性了我的应用程序。我使用可达性API进行主机检测。 我用它作为下面写

self.hostReach = [Reachability reachabilityWithHostName:@"https://10.98.241.22:8080/arsys"]; 
[self.hostReach startNotifier]; 

即使主机可用,它提供了连接状态为“无法接通”在下面的代码

NetworkStatus netStatus = [self.hostReach currentReachabilityStatus]; 

请帮助我,让我知道我在哪里做错了。

我需要使用reachabilityWithAddress这种类型的主机URL。如果是,那么请给我一个示例使用这个API。

谢谢大家!

回答

8

主机名基本上是指一个域名,而不是协议(http/https)和IP地址。

如果您想使用IP地址,请尝试-reachabilityWithAddress:。它应该是这个样子:

struct sockaddr_in address; 
address.sin_len = sizeof(address); 
address.sin_family = AF_INET; 
address.sin_port = htons(8080); 
address.sin_addr.s_addr = inet_addr("10.98.241.22"); 
Reachability *addressReach = [Reachability reachabilityWithAddress:&address]; 

不要忘记#include <arpa/inet.h>

编辑 - 4年之后

现代的和适当的方法来解决,这将是使用的东西比如AFNetworkReachabilityManager,它也允许检查什么样的互联网连接可用。

+0

非常感谢...它为我工作..但只是一个小疑问...我们还需要检查互联网连接与此主机检查? – vikas 2011-06-09 14:05:08

+0

@vikas不,因为没有互联网连接,您将无法到达该地址。 – hwaxxer 2011-06-09 16:04:56

+0

嗨HWaxxer,今天的服务器已关闭,此IP和此URL'https://10.98.241.22:8080/arsys'无法通过Safari或Windows进行访问,但我仍然可以获得可用连接状态。如果我断开局域网或关闭机场,那么只有它表示主机不可达,如果连接了互联网,那么即使它不可访问,它总是会给主机提供状态 – vikas 2011-06-10 05:00:40

0

您是否尝试使用其他主机(如“http://google.com/”)的代码?它可能是端口的东西,我不知道如果API支持

+0

是的,我用它'www.apple.com',它工作正常。它提供了可用的主机。但没有与我的网址'https://10.98.241.22:8080/arsys'这个网址可以通过Safari浏览器访问,但是在API中,它的状态为“无法访问”。 – vikas 2011-06-09 12:48:31

+0

和是的,当我检查互联网连接,然后它工作正常。 – vikas 2011-06-09 12:50:08

+0

那么你应该去@hwaxxer的答案使用-reachabilityWithAddress: – ejazz 2011-06-09 13:10:17

相关问题