4

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

我目前的代码:

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];

请让我知道我做错了什么。请不要将我链接到其他问题,我已经搜索过,但没有一个有我要找的东西。

4

2 回答 2

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

“当应用程序发送到网络堆栈的数据包可以离开本地设备时,远程主机被认为是可达的。可达性并不能保证数据包会真正被主机接收。”

于 2012-07-09T19:32:32.807 回答
1

我现在已经修好了,我需要把这条线:并替换to
const char *serverIPChar = [serverIP cStringUsingEncoding:NSASCIIStringEncoding];
中的“fr7.mooshroom.net” 。不管怎么说,还是要谢谢你inet_addrserverIPChar

于 2012-07-11T12:09:17.207 回答