【コラム】
前回までのプログラムは一方通行でした。クライアントがサーバーに接続して、メッセージを送信すると、サーバーがメッセージを受け取ってクライアント側の画面に表示するという単純なものでした。
しかし、チャットと言えば、複数人が同時に使うもので、誰かが発言するとその内容がクライアント全員の画面に表示されるというものです。これを実現するために、もう少しサーバーとクライアントの役割分担を決めていきます。
前回までのサーバーとクライアントの役割は以下のようになっていました。
このときクライアントは、サーバーのIPアドレスを指定して接続します。そのため、1つのクライアントでは、1つのサーバーにしか接続できません。しかし、サーバーは複数のクライアントを同時につなげておくことができます。
そこでサーバーはクライアントから受信したメッセージを全てのクライアントに送り返し、クライアントはサーバから受信したメッセージを画面上に表示するという仕組みにしておきます。すると、クライアントの誰かが発言したメッセージを、サーバーに接続しているクライアント全員に届けることが可能になります。
今回作るチャットソフトの、サーバーとクライアントの役割を個条書きにしてみます。
「サーバー」側
「クライアント」側
この動きを作れば、チャットソフトの基本ができるでしょう。
それでは上記のサーバーの動きを、実際になでしこのプログラムに直していこうと思います。
以下がサーバー側のプログラムです。
ほとんど、前回と変わりありません。今回増えた役割を行っているのが8行目で、クライアント全員へメッセージを送る処理をしています。ここではTCPサーバーの「全送信」命令を使って実行しています。
次にクライアント側のプログラムです。
クライアント側のプログラムも前回とほとんど同じです。ただし、メッセージを受信すると、そのデータ(この話の場合、受信したメッセージ)が自動的に変数「受信データ」へ代入されるサーバーに対し、クライアントでは、明示的に「受信」命令を実行し、サーバーからのメッセージを受ける必要があります。
今回は上記の命令を実行し、かつサーバーから送られてきたメッセージを表示するため、4行目にイベント「受信した時は~」を追加しています。
本当に複数のクライアントが1つのサーバーに接続できるのか実験してみましょう。このプログラムでは、接続先のサーバーを「127.0.0.1」としています。「127.0.0.1」のアドレスは、自分自身を表すため、パソコンがネットワークにつながっていなくても、チャットのテストを行うことができます。
はじめに、サーバー1つと、クライアントを2つ(それぞれA、Bとします)起動してみてください。クライアントAで発言すると、次の画面のように、発言したクライアントAに加え、もう1つのクライアントBにも同じ発言が表示されます。
また、クライアント側の3行目にあるサーバーのIPアドレスを実際にネットワーク上にあるパソコンのIPアドレスに変更することで、離れた場所のパソコンともチャットを楽しむことができると思います。
さて、今回、10行で作ったチャットソフトにも欠点があります。それは、いくつか発言が続くと画面をはみ出してしまうことです。今回は発言を表示するのに、なでしこの「表示」命令を使っているためです。
この命令だけでは、挨拶をしたくらいでお互いの発言が読めなくなってしまいます。また、発言だけが表示されるので誰の発言かが分からず、3人以上でチャットしたとき混乱してしまうかもしれません。
そこで、以下の機能を追加してみます。
この2機能を追加するには、クライアント側を改良します。
このプログラムでは、2行目でログという名前のメモ部品を作成し、6行目で受信した発言が表示されるようになっています。最新の発言がメモの最上部に表示されるので、続けて長く会話をしても誰がどのような発言をしたか認識できるようになっています。
さて、実際にここまでで作ったプログラムを使って遊んでみると、さらに改良すべき点が見つかることと思います。まず、クライアント側で「尋ねる」命令を使ってユーザーの発言を入力しているので、自由にウィンドウが操作できません。そして、サーバーのアドレスをプログラムに埋め込んでいるので、サーバーを変更するたびにプログラムを書き換える必要があります。プログラムの実行時に、サーバーのIPアドレスを入力できるようにしたいものです。
実は、なでしこ本体のサンプルプログラムの中にも、チャットソフトが収録されています。ですから、それを参考にしながら独自の改良を加えたオリジナルチャットソフトを作ってみてください。
| レノボ・ジャパン、ウェブ広告モデルを一般公募 - 新生活キャンペーンの一環で [21:21 2/10] |
| 【レポート】スマートフォンを狙ったワンクリック詐欺やオンラインバンキングを狙うゼットボット - トレンドマイクロマンスリーレポート [20:43 2/10] |
| 【レポート】レノボ、大和研究所の開発陣らによる「ThinkPad X1 Hybrid」の技術解説 [20:41 2/10] |
| デル、「冬モデルファイナルセール」最終週 - 各種アップグレードが無料 [20:13 2/10] |
| Appleが3月初旬にスペシャルイベント開催の噂 - iPad 3の発表か [18:34 2/10] |
|
坂本教授、木の光合成に着目した不思議な音楽的挑戦!『ETV特集』 [10:08 2/11] キャリア |
|
バロックで異端!水墨画の巨匠、雪村周継の神業に迫る! [10:07 2/11] キャリア |
|
元・宝塚の真琴つばさ、ドラマ初主演で小学生の母親役に挑戦! [10:07 2/11] キャリア |
|
「四大陸フィギュア」今夜は連覇のかかった高橋、昨年末復活した浅田、村上に注目! [10:07 2/11] キャリア |
|
【EU発!Breaking News】精神疾患治療のため?マラリア患者の血液を注射された男性。(オーストリア) [10:05 2/11] キャリア |