このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。
Processing はまあまあできる | 絵が得意 | |
学籍番号 | 氏名 | (番号欄) |
就職先のジャンルをそろそろ考えている | ネットワークゲームなど通信を行うゲームをやったことがある |
本日のワークで最終的に作成した絵を添付し、班員の名前を記入したメール を提出すること。
11/6 火曜日の夕方までに <sakamoto@c.dendai.ac.jp>宛にメールすること。
教室のネットワークは、セキュリティの設定上、学生のパソコン同士が通信 できないように設定されているので、この演習はできません。
相互接続できるネットワーク環境が必要になります。 教室ネットワーク以外のネットワーク環境が必要となる場合があります。 公衆ネットワークでも同様の設定がされている場合がありますので、授業時 間以外でワークを実施したいが、環境がない場合はご相談ください。
個人
int mycolor=#789abc;
if (mousePressed == true) {
// Draw our line
stroke(mycolor);
line(pmouseX, pmouseY, mouseX, mouseY);
// Send mouse coords to other person
c.write(pmouseX + " " + pmouseY + " " + mouseX + " " + mouseY + " " + mycolor + "\n");
}
stroke(data.length>4?data[4]:0);
int mycolor=#789abc;
if (mousePressed == true) {
// Draw our line
stroke(mycolor);
line(pmouseX, pmouseY, mouseX, mouseY);
// Send mouse coords to other person
s.write(pmouseX + " " + pmouseY + " " + mouseX + " " + mouseY + " " + mycolor + "\n");
}
stroke(data.length>4?data[4]:0);
ペアで通信の練習をします。奇数人数の場合は交代で行ってください。
グループで一枚の絵を書きます。 提出物は画面の絵ですので、提出を意識して絵を描いてください
Transmission Control Protocol(TCP)はインターネットにおいてメッセージを交換するためのプロトコルです。 これは、端末と端末同士を接続するEnd to End のプロトコルです。 端末間同士ではIPを利用してパケット通信ができるだけですが、これを利用 してパケットよりも大きなファイルを高い信頼性で送ることを実現します。
TCP はポート番号という16bitの番号(0〜65535)までの数で多重化されてい て、それぞれで異なるやり取りをすることができます。 通信形態としては、受け側と送り側があり、通常、受け側は サーバ、送り側はクライアントと呼ばれます。 ポート番号のうち、0から1023までは世界共通でサービスが決まっています (システム領域) 。 特に、80はWWWのポートとして利用されています。 1024から49511までは様々なサービスに使われますが、よく使われる番号は 共有されています。 例えば、8080も実験的なWWWのポートとして利用されています。 49512から65535まではprivateポートといい、自由に使えます。
インターネットに対応しているOSにはTCPを使うApprication Program Interface(API)としてソケットと呼ばれる仕組みが用意されて います。 これは、ファイルを扱うのと同じ要領で、ネットワーク間のファイル転送を 実現するものです。
ファイルをプログラムで扱う場合、ファイル名を指定して open することで、 ファイルハンドルを得て、ファイルハンドルに対して、write や read など の操作を行い、最後に close して処理を終了します。
一方、ソケットでは、クライアントとサーバで処理が違います。
クライアントはサーバのアドレスとポートを指定することでソケットを得て、 そのソケットをファイルハンドルのようにreadやwriteて文字列を書いたり 読んだりすることで通信を行います。 従って、クライアントからはほとんどファイルと同様の手順で TCP の通信を 行うことができます。
一方、サーバーはもう少し複雑です。 サーバはクライアントを受け付けると言う仕事と、実際にクライアントにサー ビスを提供すると言う二つの仕事をします。 クライアントへサービスをしている間でも、他のクライアントを受け付けられ るように、通常、受け付け用のポート、プロセスと、サービス用のポートやプ ロセスは別になります。 この考え方をソケットに当てはめると次のようになります。
このような手順を踏むことになりますが、記述の仕方はプログラミング言語に 依存します。 但し、 OS レベルとしてはプリミティブ(基本操作)として次の動作が提供され ます。
import processing.net.*;
でネットワークのライブラリ
を読み込む
Client c;
などでクライアント用の変数を作るc = new Client(this, "IPアドレス", ポート番号);
などと、クライアントオブジェクトを作成するdataIn = c.read();
や
c.write("文字列")
でサーバとやり取りをする。
Server s;
など、サーバの変数を作るs = new Server(this, ポート番号);
などとサーバオブジェクト作成Client c = s.available();
と接続してきているクライアントと繋がるクライアントを求め、求めたク
ライアントを使って read, write を行う。
TCPはファイルの送受を双方向で行います。 一方で、通信はすべて IPパケットを介して行います。 そのため、TCPの内部ではかなり複雑な処理が行われていて、様々なアルゴ リズムが開発されています。
送信側として輻輳制御ウィンドウを始め1とし、ACKを受け取るたびに輻輳制 御ウィンドウを1ずつ増やすアルゴリズムをスロースタートと呼 びます。
単位時間ごとに、輻輳制御ウィンドウの示す数のセグメントを確実に送ること ができると仮定した場合、 スロースタートアルゴリズムで、輻輳制御ウィンドウは時間に対してどんな関 数になりますか?