iPhone/iPod touch/iPad でのネットワークプログラミング(1)

iPhone/iPad(iOS)でのネットワークプログラミングの記事がそこそこ増えてきた。
が、HTTPリクエストについてがほとんど。書籍もほとんどこれ。
これだと、iPhone同士とか、iPhone<->iPadなどはHTTPサーバを作る事になるんで結構面倒なんだよね。
通信効率も悪いし。


ここいらでちょいとまとめてみようと思う。
iOSでのネットワークプログラミングの方法として
 1. HTTPRequest を使う
 2. Cocoa APIによるソケット通信
 3. CFNetworkによるソケット通信
 4. C言語で(BSD)ソケット通信
 5. Bluetoothによる通信
がある。HTTPRequestだけあえて別に書いたのは、先に述べたとおり。ちょいと毛色が違うから。
上の方ほど簡単に実装できるが、自由度は低い。下の方ほど自由度は高いが敷居も高い。
AppleではCFNetworkを勧めているが、やはり敷居が高いように思う。特にAppleのサンプルはいろいろ詰めすぎなので、解読が大変。
単純なサンプル用意できんのかねぇ。。。


1.はサイトからのダウンロードとかに使う。2〜5は他のマシンや端末との通信に使う。特にローカルの場合は2.を使うのが楽ちん。さらに至近距離なら5.かな。
HTTPRequest に関してはいろんな本に記載されているし、いろんなサイトで解説しているのでパス。まぁ、そのうちまとめるかもね。
ここでは、Cocoa API + CFNetwork + BSDソケット の組み合わせで、通信を行う方法を書いていこうと思う。


手順を簡単に書いておくと
(1)C言語でソケットの作成
(2)作ったソケットをNSFileHandleと関連付ける
(3)CFNetworkを使ってソケットがまだ繋がっているかを確認する
(4)NSFileHandle の NSNotification を利用して送受信する
こんな感じ。最初が大変だけどやってしまえばあとが楽。(3)があるのは、突然の切断に備えるため。これは後日理由を書く。
今日はここまで。