SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

iPhoneネットワークプログラミング

TCP/IPを使用してサーバと通信する方法

CFNetworkによるネットワーク通信

 サーバとのTCP接続を確立するもう1つの手段としてCFNetworkフレームワークがあります。CFNetworkはCore Servicesレイヤのフレームワークの1つ(実体はCライブラリ)で、ネットワークプロトコル(HTTP、FTP、BSDソケットなど)を処理するために必要な抽象化を行います。

 CFNetworkフレームワークの各クラスの使い方を見てみましょう。以下のステートメントをNetworkViewController.mファイルに追加します。

#import "NetworkViewController.h"
#import "NSStreamAdditions.h"

#import 

@implementation NetworkViewController

NSMutableData *data;

NSInputStream *iStream;
NSOutputStream *oStream;

CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;

 connectToServerUsingCFStream:portNo:メソッドをリスト2のように定義します。

リスト2
-(void) connectToServerUsingCFStream:(NSString *) urlStr portNo: (uint) portNo {
        
    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, 
                                       (CFStringRef) urlStr, 
                                       portNo, 
                                       &readStream, 
                                       &writeStream);
    
    if (readStream && writeStream) {
        CFReadStreamSetProperty(readStream, 
                                kCFStreamPropertyShouldCloseNativeSocket, 
                                kCFBooleanTrue);
        CFWriteStreamSetProperty(writeStream, 
                                kCFStreamPropertyShouldCloseNativeSocket, 
                                kCFBooleanTrue);
        
        iStream = (NSInputStream *)readStream;
        [iStream retain];
        [iStream setDelegate:self];
        [iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] 
            forMode:NSDefaultRunLoopMode];
        [iStream open];
        
        oStream = (NSOutputStream *)writeStream;
        [oStream retain];
        [oStream setDelegate:self];
        [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] 
            forMode:NSDefaultRunLoopMode];
        [oStream open];         
    }
}

 最初にCFStreamCreatePairWithSocketToHost()メソッドを使用して、サーバにTCP/IPで接続された読み書き可能なストリームを作成します。このメソッドは読み取り用のストリーム(readStream)と書き込み用のストリーム(writeStream)への参照を返します。これを型変換することで、Objective Cにおけるそれぞれのストリーム(NSInputStream、NSOutputStream)が得られます。後は前と同様に実行ループやデリゲートの設定を行います。

データを送信する

 サーバにデータを送信するには、NSOutputStreamオブジェクトを次のように使います。

-(void) writeToServer:(const uint8_t *) buf {
    [oStream write:buf maxLength:strlen((char*)buf)];    
}

 このメソッドは、符号なし整数のバイト配列をサーバに書き込みます。

次のページ
データを読み取る

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Wei-Meng Lee(Wei-Meng Lee)

Microsoft MVP受賞者。Microsoft社の最新テクノロジー実地研修を専門とするDeveloper Learning Solutions社を創設。.NETとワイヤレステクノロジーの開発者、指導者として知られる。国際的なカンファレンスでたびたび講演し、.NET、XML、ワイヤレステクノロジーに関す...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4936 2010/04/19 19:08

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー