【问题标题】:Reachability with Address - Server AND Port - iOS 5地址可达性 - 服务器和端口 - iOS 5
【发布时间】:2012-07-11 20:09:17
【问题描述】:

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

我现在的代码:

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

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

【问题讨论】:

  • 我怀疑函数inet_addr的输入参数,你能用ip地址替换它吗?

标签: iphone objective-c ping reachability


【解决方案1】:

基本上 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

"当一个数据包由一个远程主机发送时,认为远程主机是可达的 应用程序进入网络堆栈,可以离开本地设备。 可达性并不能保证数据包实际上是 主机收到。”

【讨论】:

  • 我不需要主机接收数据,我只需要找出它是在线还是离线。
  • 我的意思是,您将付出额外的努力来添加端口,但不清楚 Reachability 是否使用它。明白了吗?
  • 嗯嗯..你不明白。嗯嗯。无论如何,不​​客气。
  • 哦,我必须添加端口,它是为了检查游戏服务器是否在线,服务器需要一个端口来连接它。这就是为什么我要添加端口,否则我不会这样做,我不傻
  • 但是您没有使用 Reachability 来连接它,是吗?
【解决方案2】:

我现在已经修好了,我需要把这条线:
const char *serverIPChar = [serverIP cStringUsingEncoding:NSASCIIStringEncoding];
并将inet_addr 中的“fr7.mooshroom.net”替换为serverIPChar。还是谢谢

【讨论】:

  • 为什么 -1 一个解决了它的答案?
  • 也许他们没听懂你的回答?那么你现在使用IP地址吗?我没有给你一个负面的观点,那会花费我太多。 ;-) 我认为你没有回答你的问题。
猜你喜欢
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 2012-07-07
  • 2011-04-29
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 2019-02-07
相关资源
最近更新 更多