可与地址连接 - 服务器和端口 - iOS 5

时间:2012-07-09 12:51:54

标签: iphone objective-c ping reachability

我正在尝试检查服务器是在线还是离线:我遇到连接到它时有端口的问题

我的代码:

struct sockaddr_in address;
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
address.sin_port = htons(25667);
address.sin_addr.s_addr = inet_addr("fr7.mooshroom.net");

Reachability *reachability = [Reachability reachabilityWithAddress:&address];

请让我知道我做错了什么。请不要把我与其他问题联系起来,我已经搜索过了,没有人能找到我正在寻找的东西。

2 个答案:

答案 0 :(得分:5)

基本上,inet_addr()函数不会为您执行域名解析。您需要传递一个IP地址(例如127.0.0.1)。

要将DNS名称解析为IP地址,您需要查看标准的gethostbyname()函数。

澄清:

struct hostent *host = gethostbyname("fr7.mooshroom.net");
if (host) {
    struct in_addr in;
    NSLog(@"HOST: %s" , host->h_name);
    while (*host->h_addr_list)
    {
        bcopy(*host->h_addr_list++, (char *) &in, sizeof(in));
        NSLog(@"IP: %s", inet_ntoa(in));
    }
}

现在,说了这么多,你确定这会做你想要的吗? SCNetworkReachabilityRef的文档建议不要:

http://developer.apple.com/library/ios/#documentation/SystemConfiguration/Reference/SCNetworkReachabilityRef/Reference/reference.html

  

“当数据包发送时,远程主机被认为是可达的   应用程序进入网络堆栈,可以离开本地设备。   可达性不保证数据包实际上是   主持人收到了。“

答案 1 :(得分:1)

我现在已经修好了,我需要说明这句话:
const char *serverIPChar = [serverIP cStringUsingEncoding:NSASCIIStringEncoding];
并替换" fr7.mooshroom.net"在inet_addrserverIPChar内。不管怎样,谢谢