NodeSchoolに入学しよう!

TCPサーバーの作成

全334コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
TCPの概要を説明し、netモジュールを使用してTCPサーバーを作成する方法について学びます。
講師:
11:54

字幕

このレッスンでは node JSで TCPサーバーを作成する方法について 説明します それではまずワークショッパーを起動しましょう Learnyounode エンター 今回はこちらの TIME SERVER という問題を解きます エンターを押します 問題 (画面に表示) こちらのYYYY-MM-DD hh:㎜ という部分には実際には 現在時刻 現在日付が入りますので こちらの例のように例えば 現在時刻 現在日付が入りますので こちらの例のように例えば 2013-07-06 スペースで区切って 17:42 といったような文字列が入ります またこの時刻や日付の2ケタの部分は 数字が実際1ケタだった場合には 0で埋めて2ケタになるようにしてください TCPとは何なのかについて 簡単に説明します TCPとは 2つの異なるアプリケーションの中で データを送信したり あるいは データを受信したりする為の方法です TCPではIPアドレスと ポート番号の組みによって お互いを識別します この図での左右のグレーの四角形が 2つのアプリケーションを表しているのですが 例えば左側のアプリケーションは 192.168.1.2 というIPアドレスの 50001というポート番号 の上で 動いていることを表しています TCPで通信をする為には まずどちらかから ポート番号とIPアドレスの組みを 指定することによって 接続を確立する必要があります ひとたび接続が確立されれば お互いの間で データを送信したり あるいはデータを受信したりという事が 自由にできるようになります TCPの重要な特徴の一つとして データが送信した順番で必ず到達する という事が挙げられます つまり送信して 相手のアプリケーションに届くまでの間に データの順番が入れ替わったりはしない ということです 又 TCPでは 送信したデータは 確実に相手のアプリケーションに届くという事が 保障されています 途中で欠落したりはしません 又TCPで通信するアプリケーション同士は 必ずしも同じホスト内にある必要はありません ホストをまたがって通信することも出来ます つまり異なるマシンの間にある アプリケーションの間で通信できるのです それどころか インターネットをまたがって 異なるアプリケーションで データを通信することさえ出来ます 皆さんの良く使われているhttp というプロトコルも TCPの上で動作するプロトコルです それでは実際にnodeの上で TCPサーバーを作ってみましょう nodeのインタープリターを立ち上げます そしてTCPで通信したり あるいは TCPサーバーを作成するために ネットモジュールをロードします require('net') ネットモジュールでサーバーを作成します net.createServer このクリエイトサーバーには コールバック関数を渡します そのコールバック関数は socket というオブジェクトを受け取ります socket というのは TCPで通信するためのAPIの名前で node GSに限らず 一般的な名称です 例えばC言語やJavaといった ほとんどの環境でsocketを使って 通信することが出来ます このsocketオブジェクトに対して write とすることで相手側にも データを送信することが出来ます 例えばこのように aaa という文字列を渡すと この文字列を相手側に 送信することが出来ます またsocketではひとたび 接続が確立されると 基本的には接続が続いたままになります 接続を明示的に切断して 通信を終了したい場合には socketに対してエンドメソッドを呼び出します これで通信が終了します あるいはエンドに対して 何かしらデータを渡してやると そのデータを送信した上で その直後に切断をします 例えばこのサーバーでは クライアントが接続してきたら I am a server という文字列を返す サーバーにしてみます 因みにこのコールバック関数は クライアントが接続してきたタイミングで 呼び出されます そして関数の定義を閉じて クリエイトサーバーでサーバーを作成します それから実際にサーバーを起動する為には サーバーオブジェクトに対して listen というメソッドを呼び出します これでlistenに対して listenするポート番号を渡します こうすれば 20000 でlistenして クライアントはこのアプリケーションが 動いているホストの20000 という ポート番号を指定することで TCPの接続を確立することが出来ます ではサーバーを起動します さてそれではTCPで実際に このサーバーに接続してみたいと思います コマンドからTCPでの接続を試す為には nc というコマンドを使います nc の 127.0.0.1 これはローカルホストを意味する IPアドレスです あるいはこの様に文字で localhost と書いても同じ意味になります そして今リストにしたポート番号 20000 ですね 20000に対して接続してみます そうするとこの様に I am a server という文字列が返ってきました また今回の問題は 日付をフォーマッティングして返す という問題です デートオブジェクトを使って 自分で日付を フォーマッティングしてやってもいいのですが 新しいモジュールを使う事によって その実行が少し楽になります strftime というのをインストールしましょう npm install strftime s t r f t i m e ですね ではインストールが出来たので strftimeモジュールを使ってみます nodeのインタープリターを再起動して まずはデートオブジェクトを生成しましょう デートオブジェクトを生成する時に コンストラクターに対して 何もパラメーターを与えないで生成すると これは現在時刻になります そしてこれを 自分の好きなようにフォーマットしてみましょう そのためにstrftimeモジュールを ロードします このstrftimeは関数となっており これに対してまず1番目のパラメーターで フォーマットを渡します 例えば % の 大文字 Y という文字列をフォーマットとして渡して 2番目にデートオブジェクトを渡します するとこのように 年 の部分ですね 2014年 という文字を返してくれました またあるいは ここに 小文字の m を渡して呼び出すと これは12月なので 12 という文字を 返してくれました あるいは 小文字の d だと これは日付ですね またさらに これは一つのパーツだけではなく 複数の機械対象の文字を 入れることが出来ますので このように % の h それからコロンで区切って % の大文字 M とすればこの様に 時間 と 分 の部分がコロンで区切られて 表示されました これを使う事によって 簡単に日付をフォーマットして 文字列にすることが出来ます それではヒントはここまでですので いったん動画を止めて 皆さん問題を解いてみて下さい さて皆さん正解出来ましたでしょうか 答え合わせです 私の方で実際のプログラムを書いてみます program js ファイルを開いて まずは ネットモジュールのロードからですね それから今回 strftimeモジュールも使いますので そちらもロードします require strftime そしてサーバーを作成しましょう create server コールバック関数は socket というオブジェクトをとります そしてサーバーを作成すると同時に listen してしまいましょう そしてサーバーを作成すると同時に listen してしまいましょう listen には ポート番号を渡す必要がありました ポート番号は今回 コマンドラインパラメーターで渡されますので process の argv配列の 2 ですね それからargv配列は文字列で渡されますので これを整数に変換してあげましょう parseInt の受信数として解釈するので 2番目のパラメーターに 10 を与えます これでポート番号が ナンバー型の形式で手に入りました これでサーバーの起動までできましたので あとはクライアントが接続してきたタイミングで 現在日付を送り返してやります 日付の文字列を送るために socket を使用します socket の end でデータを送って その直後に 切断してしまいます そして送るデータは strftimeでフォーマッティング 実際のフォーマットは まず % Y で年 それからダッシュで区切って % の 小文字のm で月 それから % の小文字d で日付 それからスペースで区切って % の 大文字のHで 時刻 コロンで区切って % の 大文字Mで 分 それから問題では日付の後に 改行コードを付与するという事でした 改行コードをこの様に付与します そして2番目のパラメーターに 現在時刻のデートオブジェクトを 渡してやります new Date でコンストラクターに何も渡さないで デートを生成すれば 現在時刻です そして関数の呼び出しを完了して これでいいはずですので 検証してみましょう learnyounode veryfy program.js このように 結果成功となりました このレッスンでは node JSで TCPサーバーを作成する方法について 学びました

NodeSchoolに入学しよう!

NodeSchoolワークショッパーとは、オープンソースで開発されているNode.jsやJava Scriptについて学ぶためのクイズ形式のアプリケーションです。このコースでは、learnyounodeとexpressworksという2つのワークショッパーを通じてNode.jsとExpress.jsの基本的な使い方を学びます。

3時間13分 (24 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
Node.js Node.js 0.10.24
価格: 3,990
発売日:2015年04月07日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。