2009-07-10 16 views
2

私はいくつかのiPodデバイス用にobjective-Cでプログラミングしています。私はサーバークライアントモデルを利用するアプリケーションを開発しており、私はCソケットでUDPプロトコルを使用しています。私はiPodのデバイスのIPアドレスを決定することができるクラスがありますか?他のフォーラムでグーグル・グーグルをしても、何も見つかりませんでした。明らかにこのコマンドは機能しませんが、ipAddress = self.ipのようなものは私が気にしていたものです。私はマルチキャストCソケットを設定していますが、私はpingコマンドに似た回避策を実行しようとしています。これは明らかにobjective-Cにも私の知識にも存在しません(制限されています。この夏の開始以来、客観的なCで)少なくとも。アドバイスやヒント?Objective-C - iPod touchのIPアドレスをプログラムで決定する

答えて

7

このコードスニペットは、インターフェイスをループして取得します。

- (NSString *)getIPAddress 
{ 
    NSString *address = @"error"; 
    struct ifaddrs *interfaces = NULL; 
    struct ifaddrs *temp_addr = NULL; 
    int success = 0; 

    // retrieve the current interfaces - returns 0 on success 
    success = getifaddrs(&interfaces); 
    if (success == 0) 
    { 
     // Loop through linked list of interfaces 
     temp_addr = interfaces; 
     while(temp_addr != NULL) 
     { 
      if(temp_addr->ifa_addr->sa_family == AF_INET) 
      { 
       // Check if interface is en0 which is the wifi connection on the iPhone 
       if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) 
       { 
        // Get NSString from C String 
        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]; 
       } 
      } 
      temp_addr = temp_addr->ifa_next; 
     } 
    } 

    // Free memory 
    freeifaddrs(interfaces); 
    return address; 
} 
+0

最初にテストしてコードを実行し、完全なコードを投稿してください。 私は上記のコードから戦闘とエラーが発生しています。 警告:関数 'getifadrs'の暗黙的な宣言 エラー:(temp_addr!= NULL)の とそれ以上のエラーで、不完全な型のポインターを参照解除しています。 – Biranchi

+6

適切なヘッダーが含まれていません。まず、コードをコピーして浴室の壁に貼り付ける前に理解しておいてください。 –

+0

誰かが適切なヘッダーが何であるかについて何か刺激を与えたいですか? – AddisDev

0

あなたはこれを見ましたか? http://www.appsamuck.com/day4.html。正しい答えは、CFHostをSDKに使用することだと思います。

EDIT
そのプロジェクト内のソースは、AppleがSDKにNSHostを置くことを決定しない限り、完全に無効なソリューションになり、次のコード、を使用して表示されます。

-(NSString*)getAddress { 
    char iphone_ip[255]; 
    strcpy(iphone_ip,"127.0.0.1"); // if everything fails 
    NSHost* myhost =[NSHost currentHost]; 
    if (myhost) 
    { 
     NSString *ad = [myhost address]; 
     if (ad) 
      strcpy(iphone_ip,[ad cStringUsingEncoding: NSISOLatin1StringEncoding]); 
    } 
    return [NSString stringWithFormat:@"%s",iphone_ip]; 
} 
+0

これは私の頭の中で最初にポップアップしたものです。 – ryansstack

+0

NSHostはiPhone SDKではサポートされていません。それがあればそれは素晴らしいだろう。 –

+0

NSHostはiPhone SDKでサポートされています! – user200654

関連する問題