ネットワーク通信
やること
この教材では、ネットワーク通信の基本動作を学びます。サーバー側とクライアント側の2つのプログラムを作成します。クライアント側のプログラムは、サーバー側のプログラムに情報を送信します。サーバー側のプログラムは、受信した情報を使って、クライアント側のプログラムに返信します。
ステップ1
クライアントからのメッセージを受信して返信するサーバー側のプログラムを作成します。エディター(以下、このエディターのことを「サーバー側のエディター」と呼びます)に以下のプログラムを入力してみましょう。
port=8080
server_conn_id$=bind$(port)
if len(server_conn_id$)=0 then
print "サーバーの起動に失敗しました。"
end
end if
print server_conn_id$+"で接続を待っています。"
do
packet@=receive@(server_conn_id$)
if len(packet@)<>0 then
client_conn_id$=packet@[0]
message@=packet@[1]
print client_conn_id$+"からメッセージを受信しました:"+message@[0]
reply@=["サーバーからの返信:受信したメッセージは"+message@[0]]
if not send(client_conn_id$,reply@) then
print "返信に失敗しました。"
end if
end if
loop
ステップ2
サーバー側のエディター の右下にある「▶実行」ボタンを押すと、入力したプログラムが実行されます。実行した後は、画面の右上にある「ドキュメント」タブを押して、ここに戻ってきてください。
では、サーバー側のエディターの「▶実行」ボタンを押してください。
ステップ3
サーバー側の実行画面に以下のように表示されたら成功です。
サーバープログラムが動いていて、ポート8080でクライアントからの接続を待機しています。「~で接続を待っています。」の「~」の部分は、接続IDです。クライアント側のプログラムからサーバー側のプログラムに接続するために、この接続IDが必要となります。
接続IDをクライアント側のプログラムに書き込むために、ここで接続IDをクリップボードにコピーしておきます。以下の手順を行ってください。
- 実行画面の右上のアンテナアイコンをクリックします。
- ポップアップ画面が表示されます。接続IDの隣にあるコピーアイコンをクリックして、接続IDをクリップボードにコピーします。
ステップ4
次は、クライアント側のプログラムを作成します。サーバー側のプログラムとクライアント側のプログラムをJasmine Teaの一つの画面で作ることができないため、クライアント側のプログラムを作るためのJasmine Teaの画面を新しく開きます。 ここ をクリックして、ウェブブラウザの別タブでStudio画面を表示してください。移行の操作は、新しく開いたタブ内のStudio画面で行います。
では、プロジェクト一覧から新規作成をクリックし、エディター(以下、クライアント側のエディター)に以下のプログラムを入力してみましょう。
接続ID
には、サーバーを起動したあとにコピーしておいた
接続IDに置き換えてください。
server_conn_id$="接続ID"
client_conn_id$=connect$(server_conn_id$)
if len(client_conn_id$)=0 then
print "サーバーへの接続に失敗しました。"
end
end if
print "サーバーに接続しました。"
message@=["クライアントからのメッセージ"]
if not send(server_conn_id$,message@) then
print "メッセージの送信に失敗しました。"
end
end if
do
packet@=receive@(client_conn_id$)
if len(packet@)<>0 then
print "サーバーからの返信を受信しました:"+packet@[1][0]
exit do
end if
loop
ステップ5
クライアント側のエディターの右下にある「▶実行」ボタンを押すと、入力したプログラムが実行されます。クライアント側の実行画面に以下のように表示されたら成功です。
実行したらサーバー側のタブに戻ってきてください。
では、クライアント側の「▶実行」ボタンを押してください。
ステップ6
サーバー側の実行画面に以下のように表示されたら成功です。
ステップ7
実行したプログラムを解説します。
使っている命令の簡単な紹介
-
bind$
は指定したポートでサーバーを起動し、接続IDを返す関数です。 -
receive@
はサーバーに接続しているクライアントからメッセージを受信する関数です。 -
send
はクライアントにメッセージを返信する関数です。 -
connect$
は指定した接続IDでサーバーに接続する関数です。成功するとクライアント接続IDを返します。
プログラムで行われていること
サーバー側
-
bind$
命令でポート8080のサーバーを起動します。 -
クライアントからの接続を待ち、
receive@
命令でメッセージを受信します。 -
受信した内容を表示し、返信を
send
命令でクライアントに送信します。
クライアント側
-
connect$
関数でサーバーに接続します。 -
メッセージを作成し、
send
関数でサーバーに送信します。 -
receive@
関数でサーバーからの返信を受信し、その内容を表示します。
学ぶべきこと
- サーバーを起動して接続を待機する方法。
- クライアントとの通信を通じてメッセージを送受信する方法。
- ネットワーク通信のクライアント側の基本動作。
- サーバーとのメッセージの送受信方法。
チャレンジ
- サーバーのポート番号を変更して接続を試してみましょう。
- クライアントから受信したメッセージの表示形式を変更してみましょう。例: メッセージを大文字に変換して表示する。
- クライアントから受信したメッセージをもとに返信内容をユーザー入力で動的に変更するプログラムを作成してみましょう。