SHOEISHA iD

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

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

japan.internet.com翻訳記事

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

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

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

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

 これで必要な部品は用意できました。それらを結合すれば、実際にサーバを使ってコードをテストできます。NetworkViewController.hファイルで、次のアウトレットとアクションを宣言します。

#import 

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

@property (nonatomic, retain) UITextField *txtMessage;

-(IBAction) btnSend: (id) sender;

@end

 NetworkViewController.xibファイルをダブルクリックしてInterface Builderで編集します。Viewウィンドウに次のビューを配置します(図1を参照)。

  • Text Field
  • Round Rect Button
図1 配置:Viewウィンドウにビューを配置する
図1 配置:Viewウィンドウにビューを配置する

 以下の操作を行います。

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

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

図2 確認:[File's Owner]アイテムで接続を確認する
図2 確認:[File's Owner]アイテムで接続を確認する

 NetworkViewController.mファイルに戻り、以下の行をviewDidLoadメソッドに追加します。

- (void)viewDidLoad {
[self connectToServerUsingStream:@"192.168.1.102" portNo:500];
//---OR---
    //[self connectToServerUsingCFStream:@"192.168.1.102" portNo:500];
    
    [super viewDidLoad];
}

 上のコードでは、IPアドレスが192.168.1.102(ポート番号500)のサーバに接続するものと仮定しています。サーバコードをどう書くかは、すぐ後で説明します。

 btnSend:メソッドを次のように実装します。

-(IBAction) btnSend: (id) sender {
    const uint8_t *str = 
        (uint8_t *) [txtMessage.text cStringUsingEncoding:NSASCIIStringEncoding];
    [self writeToServer:str];
    txtMessage.text = @"";
}

 txtMessageアウトレットをdeallocメソッド内で解放します。

- (void)dealloc {
[txtMessage release];

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

サーバを作成する

 以上でiPhone上のクライアントが完成したので、サーバにテキストを送信できます。アプリケーションのテスト用として、ごく簡単なコンソールサーバをC#で作成しました。Program.csファイル(リスト3)を参照ください。

リスト3
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;

namespace Server_CS
{
    class Program
    {
        const int portNo = 500;
        static void Main(string[] args)
        {
            System.Net.IPAddress localAdd = 
                System.Net.IPAddress.Parse("192.168.1.102");
            TcpListener listener = new TcpListener(localAdd, portNo);
            listener.Start();
            while (true)
            {
                TcpClient tcpClient = listener.AcceptTcpClient();
                NetworkStream ns = tcpClient.GetStream();
                byte[] data = new byte[tcpClient.ReceiveBufferSize];
                int numBytesRead = ns.Read(data, 0, 
                    System.Convert.ToInt32(tcpClient.ReceiveBufferSize));
                
                Console.WriteLine("Received :" + 
                    Encoding.ASCII.GetString(data, 0, numBytesRead));
                
                //---write back to the client---
                ns.Write(data, 0, numBytesRead);
            }
        }
    }
}

 このサーバプログラムは以下の処理を行います。

  • サーバのIPアドレスを192.168.1.102と仮定する。実際のテストでは、このサーバアプリケーションを実行するコンピュータのIPアドレスに書き換える必要がある。
  • 受け取ったデータをそのままクライアントへ送り返す。
  • いったんデータを受け取ると、もうデータをリッスンしなくなる。クライアントから再びデータを送信するためには、サーバとの接続を再度確立する必要がある。

 サーバコードが用意できたらiPhoneアプリをテストできます。Text Fieldビューにテキストを入力し、[Send]ボタンをクリックします。接続が確立されれば、Alert Viewに受信データが表示されます。

次のページ
もっと面白い例

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

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング