最新の記事
カテゴリ
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧
|
私の中ではネットワークプログラミングといえばJAVAだが、JAVAのそれは素晴らしいの一言につきる。すっかりその楽ちんさに馴れてしまった私としては、まいった。iPhoneではそうは行かない。CFNetworkとかったる過ぎるし、いまさらレガシー言語のライブラリなんか使いたくない。
そこで、NSStreamなわけで、"Stream Programming Guide for Cocoa"の"Setting Up Socket Streams"章を読んで、なんかRunLoopにフックしてAsynchronousにしている部分とか気になるが、その辺は見なかった事にしておおむねオーケーということで、とりあえず、マニュアルのサンプルコードをほぼ丸写ししてコンパイルしてみた。 まいった。シミュレータ用のビルドだと問題ないのだが、実機用のビルドだと、NSHostの hostWithAddress などというメソッドも、NSStream getStreamsToHost:port::inputStreamなどというメソッドも存在しないとコンパイラに怒られる。Obj-Cの場合、オブジェクトに存在しないメッセージを送ると普通にぶっ飛ぶので、放ってはおけない。 訳が分からないので、とりあえずNSHost.hをインクルードしてみると、NSHost.hがないという。はぁ?と怪訝に思いながら、terminalを開き findしてみる。 すると、SimulatorのライブラリパスにはNSHost.hが存在するが,iPhoneOSのそれにはない。NSStream.hの方はというと、getStreamsToHost:port の宣言が、実機だったらはじくようにしてある。 ネットで調べると、実は実機にはそれらのセレクターはちゃんと実装されているらしい。だから、警告を無視しても問題なく動作しているそうだ。つまるとこ、これらはプライベートになっていて使用禁止なんだろうと。 なんなんだろうか? 本当になんなんだろうか? マニュアルのサンプルコードで紹介している重要な、なくてはならないメソッドが使用禁止なんて事があり得るのだろうか? とはいえ、代替手段がCFNetworkへの退行しかないとなると、ここはNSStreamを使っちゃうしかない。 そこで、書き込みを信じ、実機でテストしてみる事に。 まず、コネクト要求が来たら、文字列を送り返すだけの簡単なリッスンサーバーをLinux上のJavaで書く。使用するポートをFirewallで開ける。ifconfigでip addressを調べる。これでサーバーの準備完了。 iPhone側は、"Stream Programming GUide for Cocoa"マニュアルのサンプルコードをほぼ丸写しでクライアントコードを書く。 ip addressを生で入力する為に、NSHost hostWIthNameの代わりに、hostWithAddress:(NSString*)を使用。 コンパイル、警告を無視、実機転送、起動、自宅無線LANとのWiFi接続確認(3G接続だとグローバルIPアドレスが必要になり、port->local adress変換をルーターで設定しなければならない) サーバーからのメッセージ受信成功。 やっぱり、大丈夫みたいです。 (こういう苦労はしたくないんです。不毛です。頼みますよ。。。本当に。。。)
by ngc1208
| 2008-12-27 06:25
| iPhone
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ファン申請 |
||