• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:objective-c iphoneからUDP送信)

Objective-CでiPhoneからUDP送信する方法

このQ&Aのポイント
  • 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の実装方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 でした。

okwave127yu
質問者

お礼

ありがとうございました!

その他の回答 (1)

回答No.1

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などはビルドレベルのエラーなので、まだビルドもしてないのだと 思いますが、ソースを提示して動きますか?と問われても、問われた人も 実際に動かしてみない限り「動きます」と断言するのは難しいと思います。 動かしてみて動かなかったときに、具体的にどういう現象が発生して 動かないのかを説明してソースを提示した方が、役に立つ回答を得やすいと 思います。

okwave127yu
質問者

補足

ご指摘ありがとうございました。 指摘3については、こうすれば良いということでしょうか? CFDataRef data = CFDataCreate(NULL(UInt8*)message, 13);