- ベストアンサー
Objective-CでiPhoneからUDP送信する方法
- Objective-Cを使用してiPhoneからUDPでデータを送信する方法について教えてください。
- iPhoneからUDPで指定のIPアドレスとポート番号にバイナリデータを送信するためのObjective-Cのコードを教えてください。
- iPhoneから192.168.0.3の3054ポートに0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x02, 0x44, 0x33, 0x05の13バイトのバイナリデータをUDPで送信するためのObjective-Cの実装方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 > 指摘3については、こうすれば良いということでしょうか? > CFDataRef data = CFDataCreate(NULL(UInt8*)message, 13); 「,」が抜けしまっているので、それを追加して CFDataRef data = CFDataCreate(NULL, (UInt8*)message, 13); でとりあえずいいと思います。 ついでにNo.1の回答でちょっと訂正があります。 (誤)「\42」は8進数の「42」を意味しており、10進数なら36、16進数なら0x24 ↓ (正)「\42」は8進数の「42」を意味しており、10進数なら34、16進数なら0x22 でした。
その他の回答 (1)
- Lchan0211b
- ベストアンサー率61% (573/930)
CFSocketは使ったことないので、CFSocketに関する使い方の誤りは わかりませんが、それ以前に基本的な誤りが3点あります。 (指摘1) addr.sin_addr.s_addr = addr.sin_addr.s_addr = inet_addr(”192.168.0.3); 192.168.0.3の前のダブルクオーテーションが全角の「”」になっています。 また、後の「"」がありません。 (指摘2) char* message = "\x42\42\0\0\0\0\2\0\1\2\x44\x33\5"; 「\x42\42」の後ろの\42は「\x42」の誤りで 「\x42\x42」とする必要があります。 「\42」は8進数の「42」を意味しており、10進数なら36、16進数なら0x24 として表現される値です。 (指摘3) CFDataRef data = CFDataCreate(NULL, (UInt8*)message, strlen(message)); strlen(message)は、messageに入っている文字列の長さを返しますが、 この文字列とは0終端文字列を意味していますので、\0が現れた時点で 文字列の終端とみなされます。つまりこのコーディングでは「\x42\42」 の次が\0ですので、strlen(message)の結果は2となります。 ここは固定値の13(またはそれをdefine定義したもの)を指定するしかない と思います。 そういう意味ではmessageは文字列扱いで表現するより、 char配列で表現した方がわかりやすいと思います。 指摘1などはビルドレベルのエラーなので、まだビルドもしてないのだと 思いますが、ソースを提示して動きますか?と問われても、問われた人も 実際に動かしてみない限り「動きます」と断言するのは難しいと思います。 動かしてみて動かなかったときに、具体的にどういう現象が発生して 動かないのかを説明してソースを提示した方が、役に立つ回答を得やすいと 思います。
補足
ご指摘ありがとうございました。 指摘3については、こうすれば良いということでしょうか? CFDataRef data = CFDataCreate(NULL(UInt8*)message, 13);
お礼
ありがとうございました!