我正在尝试检查服务器是在线还是离线:我遇到连接到它时有端口的问题
我的代码:
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];
请让我知道我做错了什么。请不要把我与其他问题联系起来,我已经搜索过了,没有人能找到我正在寻找的东西。
答案 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的文档建议不要:
“当数据包发送时,远程主机被认为是可达的 应用程序进入网络堆栈,可以离开本地设备。 可达性不保证数据包实际上是 主持人收到了。“
答案 1 :(得分:1)
我现在已经修好了,我需要说明这句话:
const char *serverIPChar = [serverIP cStringUsingEncoding:NSASCIIStringEncoding];
并替换" fr7.mooshroom.net"在inet_addr
到serverIPChar
内。不管怎样,谢谢