Part8:TCP/UDP

海未「今回と次回でネットワークの話をします。HTTPについては少しだけ見ましたが、今回は低レイヤのTCP/UDP通信について見てみましょう」

海未「TCP通信にはnetモジュール、UDP通信にはdgramモジュールを使います。まずはTCPからいきますね」
穂乃果「ネットワークの予習はしてきたよっ!」
海未「よい心がけです。では、TCPサーバ、TCPクライアントの順に実装していきましょう」


TCP

海未「最も原始的なサーバはこのようになるでしょう」

海未「createServerが返すnet.ServerのインスタンスはEventEmitterですから、onでリスナーを追加していくことができます」
ことり「listeningとかconnectionとかはネットワーク独自のイベント?」
海未「はい。listeningはTCPサーバが接続を受け付けられるようになったとき、connectionはクライアントから接続されたときに発火します」
ことり「じゃあ、connectionのリスナーで通信すればいいんだね」

海未「これに接続するTCPクライアントはこのようになります」

海未「さきほどのサーバを起動して、別のコンソールからクライアントを実行してみてください」
穂乃果「あ、両方にconnectedって出た」
海未「これで接続はできたことになります。例によってこのScoketEventEmitterです」

海未「では今度は、クライアントからサーバにデータを送ってみましょう」

海未「さきほどと同じように実行してみてください」
穂乃果「ファイトだよっ!」
海未「そうですね。これでサーバに対してデータが送信できているのが分かると思います」

海未「今度はサーバからクライアントにデータを送信してみましょう。基本的には同じことです」

ことり「ちゅんちゅん」
海未「いずれも、writeでソケットに書き込み、dataイベントで受信します。dataendは見覚えがあるのではないですか?」
穂乃果「ストリームだねっ!」
海未「そうです。ですから、dataではデータは細切れになりますから、このように変数に貯めていく形の実装にしています」

海未「このサンプルコードは通信部分の説明用ですから、実際に複数のクライアントから同時に接続を受けた場合などは考慮していません。データが混ざらないような工夫が必要でしょう」


UDP

海未「今度はUDP接続です。こちらはdgramモジュールを使いますが、基本的な考え方は大きくは変わりません」

海未「クライアント、サーバともにソケットを開いて通信をします。サーバ側では、bindを使うと待ち受けが始まります」
穂乃果「listeningはTCPと同じだね」
海未「はい。messageも、TCPのdataと似たようなものです」
ことり「えーっと、送る側は・・・」
海未「Bufferというのを使っていますが、これはデータをバイナリで扱うためのものです。文字列そのままは送れないということですね」
ことり「でも、toString()で戻すだけだから簡単だよね」
海未「はい。そしてあとはsendで送るだけです。TCPよりシンプルだと思います」

海未「低レイヤの通信についてはこんなところです。いよいよ次回はWebアプリの基本、HTTP通信について見ていきましょう」
穂乃果「テンション上がるにゃ~っ!」
ことり「穂乃果ちゃん、それ違うよ・・・」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です