SHOEISHA iD

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

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

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

japan.internet.com翻訳記事

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

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

データを読み取る

 サーバからデータが送られてくると、stream:handleEvent:メソッドが発火します。従って、送られてきたすべてのデータをこのメソッドの中で読み取ることになります。このメソッドは、次のように実装します。

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
    
    switch(eventCode) {
        case NSStreamEventHasBytesAvailable:
        {
            if (data == nil) {
                data = [[NSMutableData alloc] init];
            }
            uint8_t buf[1024];
            unsigned int len = 0;
            len = [(NSInputStream *)stream read:buf maxLength:1024];
            if(len) {    
                [data appendBytes:(const void *)buf length:len];
                int bytesRead;
                bytesRead += len;
            } else {
                NSLog(@"No data.");
            }
            
            NSString *str = [[NSString alloc] initWithData:data 
                                encoding:NSUTF8StringEncoding];
            NSLog(str);
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"From server" 
                                                            message:str 
                                                           delegate:self 
                                                  cancelButtonTitle:@"OK" 
                                                  otherButtonTitles:nil];
            [alert show];
            [alert release];
                        
            [str release];
            [data release];        
            data = nil;
        } break;
    }
}

 このメソッドはNSStreamというインスタンスとNSStreamEventという定数の2つのパラメータを取ります。NSStreamEvent定数には以下のいずれかを設定できます。

  • NSStreamEventNone:イベントは発生していない
  • NSStreamEventOpenCompleted:ストリームが正常にオープンされた
  • NSStreamEventHasBytesAvailable:ストリームに読み取るデータがある
  • NSStreamEventHasSpaceAvailable:ストリームにデータを書き込める
  • NSStreamEventErrorOccurred:ストリームでエラーが発生した
  • NSStreamEventEndEncountered:ストリームの最後に達した

 送られてきたデータを読み取るには、NSStreamEventHasBytesAvailable定数をチェックします。このメソッドでは、入力ストリームから読み取ったデータをUIAlertViewオブジェクトで表示しています。

 stream:handleEvent:メソッドは、接続エラーをチェックする場所としても適しています。例えば、connectToServerUsingStream:portNo:メソッドでサーバに接続できなかった場合、そのエラーを通知するには、stream:handleEvent:メソッドのNSStreamEvent定数としてNSStreamEventErrorOccurredを設定します。

切断

 サーバから切断するには、disconnectメソッドを次のように定義します。

-(void) disconnect {
    [iStream close];
    [oStream close];
}

 さらに、以下の行をdeallocメソッドに追加します。

- (void)dealloc {
    [self disconnect];
    
    [iStream release];
    [oStream release];
    
    if (readStream) CFRelease(readStream);
    if (writeStream) CFRelease(writeStream);
        
    [super dealloc];
}

次のページ
アプリケーションのテスト

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

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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー