SHOEISHA iD

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

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

japan.internet.com翻訳記事

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

もっと面白い例

 以前、DevX.comに投稿した記事の中で、.NETによる独自のインスタントメッセンジャーアプリケーションの作り方を説明しました(「Home-brew Your Own Instant Messenger App with Visual Studio .NET」を参照)。その記事で紹介したのは、複数のユーザーの間でチャットメッセージを交換できるクライアント/サーバアプリケーションでした。そのコードを利用し、本稿のiPhoneアプリをチャットクライアントとして動作するように修正すれば、他のプラットフォームのユーザーと通信することも可能です。

 前に作成した同じプロジェクトを使用し、以下のビューをViewウィンドウに追加します(図3を参照)。

  • Label
  • Text Field
  • Round Rect Button
  • Text View
図3 表示:さらにビューを追加する
図3 表示:さらにビューを追加する

 Text Viewを選択し、[Command]キーを押しながら[T]キーを押し、フォントサイズを9ポイントに変更します(図4を参照)。

図4 体裁を変更:Text Viewビューのフォントサイズを変更する
図4 体裁を変更:Text Viewビューのフォントサイズを変更する

 NetworkViewController.hファイルに、以下のステートメントを追加します。

#import 

@interface NetworkViewController : UIViewController {
    IBOutlet UITextField *txtMessage;    
    IBOutlet UITextField *txtNickName;
    IBOutlet UITextView  *txtMessages;
}

@property (nonatomic, retain) UITextField *txtMessage;
@property (nonatomic, retain) UITextField *txtNickName;
@property (nonatomic, retain) UITextView *txtMessages;

-(IBAction) btnSend:(id) sender; 

-(IBAction) btnLogin:(id) sender;

@end

 以下の操作を行います。

  • [Control]キーを押しながら[File's Owner]アイテムをクリックし、1番上のText Fieldビューまでドラッグ&ドロップする。[txtNickName]を選択する
  • [Control]キーを押しながら[File's Owner]アイテムをクリックし、1番上のText Viewビューまでドラッグ&ドロップする。[txtMessages]を選択する
  • [Control]キーを押しながらRound Rect Buttonビューをクリックし、[File's Owner]アイテムまでドラッグ&ドロップする。[btnLogin:]を選択する

 [File's Owner]アイテムを右クリックして、その接続を確認します(図5を参照)。

図5 接続:接続を確認する
図5 接続:接続を確認する

 NetworkViewController.mファイルに、リスト4のステートメントを追加します。

リスト4
#import "NetworkViewController.h"
#import "NSStreamAdditions.h"
#import <CFNetwork/CFNetwork.h>

@implementation NetworkViewController
@synthesize txtMessage;
@synthesize txtNickName;
@synthesize txtMessages;

-(IBAction) btnLogin:(id) sender {
    const uint8_t *str = (uint8_t *) 
        [txtNickName.text cStringUsingEncoding:NSASCIIStringEncoding];
    [self writeToServer:str];    
}

- (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);
            
            NSString *existingMsg = txtMessages.text;
            existingMsg = [existingMsg stringByAppendingString:str];
            txtMessages.text = existingMsg;
            
            [str release];
            [data release];        
            data = nil;
        } break;
    }
}

- (void)dealloc {
    [txtNickName release];
[txtMessages release];

[txtMessage release];

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

 さて、これですべての準備ができました。[Command]キーを押しながら[R]キーを押してアプリをテストしてください。まず自分のニックネームを入力し、[Login]ボタンをタップします(図6を参照)。メッセージを入力し、[Send]ボタンをタップすればチャットを開始できます。

図6 チャット:iPhoneでチャットを開始する
図6 チャット:iPhoneでチャットを開始する
※編集部注

 原文では「参考までに、C#で書いたチャットサーバを本稿のダウンロードパッケージとして用意したのでご利用ください」という旨の注記が記載されていましたが、ダウンロード用リンクが示されていないため、パッケージはダウンロードができないようです(2010/02/17時点)。

まとめ

 本稿では、TCP/IPを使用して他のサーバと通信する方法を説明しました。外の世界と通信する方法を会得すると非常に面白いアプリを作ることができます。次回は、iPhoneにおけるBluetoothプログラミングについてお話しします。

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
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、ワイヤレステクノロジーに関す...

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4936 2010/04/19 19:08

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング