MacBookProでBOOTPを介してIPアドレスとパラメータを提供する必要がある小さなユーティリティを作成しています。
GitHubのAsyncUdpSocketライブラリを使用しました(RobbieHansonに感謝)。有線イーサネットのみを接続して(空港オフ)マシンを構成すると、動作します。ただし、Wifiも有効にするとすぐに、すべてのブロードキャスト応答が代わりにWifiインターフェイスを経由します。これにより、有線クライアントは応答を取得しません。
コードの初期化/受信:
if (![socket bindToAddress:@"0.0.0.0" port:67 error:&err])
NSLog(@"Error: unable to bind (%@)", [err localizedDescription]);
[socket enableBroadcast:YES error:&err];
[socket receiveWithTimeout:-1 tag:0];
コードの送信:
[sock sendData:packetData toHost:@"255.255.255.255" port:68 withTimeout:-1 tag:0];
これを行う方法があるはずですが、これは私の最初のOS Xプログラムであり、フレームワークに合わせてgoogle-searchのエチケットを習得するのに苦労しています:)
アップデート
今夜、コードをいじって、AsyncUdpSocketを呼び出しているときに何をしているのかを調べました。基本的に私は次のような状況にあります。(ETH NICに割り当てられたアドレス)を呼び出しbindToAddress
て提供すると10.0.0.1
、パケットを受信せず、送信もできません。ただし、nil
メソッドにパスすると、メッセージを送信してブロードキャストを受信できます。欠点は、送信がWIFI NIC(デフォルトルート)を介して送信されることです。
バックグラウンドで-AsyncUdpSocket
ライブラリはCFSocketSetAddress
、nil値が指定されている場合はIFADDR_ANYを使用して呼び出しているか、指定されている場合は10.0.0.1の入力されたIFADDR構造体を使用して呼び出しています。エラーはスローされないため、機能することが期待されます。
何か案は?私は壁を上って行き、これを解決したいだけです。私はライブラリの非同期性が本当に好きなので、それを捨てたくありません。