2011-07-25 18 views
3

私は単純なWOLアプリケーションを作っています。 これまではソケットを正常に作成できましたが、CFSocketSetAddressを使用してアドレスを設定するときは、自分のコンピュータのネットワークIP(WiFi ip = 192.168.0.5)またはローカルIP(127.0.0.1)しか使用できません。ホストコンピュータIPではない場合、CFSocketSetAddressは失敗しますか?

WOLに関しては、ブロードキャストアドレス(255.255.255.255)にデータを送信したいと思います。これを入力すると、「アドレスを設定できませんでした」というエラーが返されます。

私はCFSocketSetAddressの使用を理解しておらず、アドレスはホストIPまたは宛先IPであるはずですか?どちらの場合でも、宛先IPがブロードキャストアドレスであるように、何をする必要がありますか?以下は

私のコードの一部です:

 /*************************************************************************/ 


     struct sockaddr_in addr; 
     memset(&addr, 0, sizeof(addr)); 
     addr.sin_len = sizeof(addr); 
     addr.sin_family = AF_INET; 
     addr.sin_port = htons(PORT); //port 
     inet_aton(IP, &addr.sin_addr);//IP is the host network ip: 192.168.0.5 


     NSData *address = [NSData dataWithBytes: &addr length: sizeof(addr)]; 

     if (CFSocketSetAddress(WOLsocket, (CFDataRef)address) != kCFSocketSuccess){ 
      NSLog(@"Address could not be set!"); 
     } 

答えて

3

私は別の方法(GOTネイティブソケット)を使用して、私の問題を解決し、代わりにCFSocketSetAddressを使用するのでは、その後、私はCFSocketSendDataの第2引数のアドレスを渡します。

私は、グーグル・グーグルの時代から私のHDDに保存されたコードなので、変更のためのリンク/リファレンスはありません。

David Gelharさんのおかげで、私は以前のquestionから正しい方向に私を指摘しました。

これを必要とする可能性のある他の人のために、これは私のコードです。私のアプリのために

//Gets native & sets options 
     /*************************************************************************/ 
     int desc = -1; 
     desc = CFSocketGetNative(WOLsocket); 
     int yes = 1; 

     if (setsockopt (desc, SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof (yes)) < 0) { 
      NSLog(@"Set Socket options failed"); 
      return EXIT_FAILURE; 
     } 
     //sets address socket - doesn't bind this is done in CFSocketSendData 
     /*************************************************************************/ 
     unsigned long bcast = 0xffffffff; 

     struct sockaddr_in addr; 
     memset(&addr, 0, sizeof(addr)); 
     addr.sin_len = sizeof(addr); 
     addr.sin_family = AF_INET; 
     addr.sin_port = htons(PORT); //port 
     addr.sin_addr.s_addr = bcast; 
     NSData *address = [NSData dataWithBytes: &addr length: sizeof(addr)]; 

     //Sends Data 
     /*************************************************************************/ 
     char ethadd []= "helloworld"; 
     CFDataRef Data = CFDataCreate(NULL, (const UInt8*)ethadd, sizeof(ethadd)); 
     if (CFSocketSendData(WOLsocket, address, Data, 0) < 0){ 
      NSLog(@"Data could not be sent!"); 
      return EXIT_FAILURE; 
     } 
     else NSLog(@"Data Sent"); 
    } 
+0

私はできれば、私はこの答えにダースupvotesを与えるだろう!ありがとう! –

+0

本当に助けてくれてうれしい! – Alex

0

、問題は、それがサンドボックス化されたということですが、それは、ネットワークの権限を与えられていませんでした。

アプリサンドボックスを使用している場合は、これらのいずれかをチェックする必要があります。

The App Sandbox section of a project's settings, with 'Incoming Connections (Server)' checked

関連する問題