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 に答える