土日シリーズ「いろんなコンピューター言語の覚え方」、第3回に、コンピューター言語の覚え方の手順をかきました。
今回は、そこの「(5)入出力処理」の「ネットワーク」です。
■ソケットが基本で、HTTPアクセス用も
基本的に、JavaやC,VC++などは、ネットワークプログラム用として、ソケットを利用したプログラムができるような機能を提供しています。
このソケットプログラムは、サーバー用、クライアント用も普通提供しています。
さらに、もっと簡単にHTTPプロトコルが使えるように、HTTPアクセス用のプログラム(クライアント側)を用意している言語(というかライブラリ)もあります。
HTTPアクセス用のプログラムの例にかんしては、Javaのものなんですけど、以下のところ
URLConnectionを使い、POST型で、CGIを呼び出すには
http://www.geocities.jp/xmldtp/jv_post.htm
でも見てもらうこととして(ただし、言語によっては多少違います)、今回は、ソケットを利用する場合について書きます。
■ソケットプログラム(クライアント)
ソケット版プログラムには、クライアントとサーバー側がありますが、
まずは、クライアント版。
Javaの場合のサンプルは、Javaの入出力:Socket通信(クライアント側)
にありますが、以下の通りになります。
1.ソケットを生成する
2.ソケットのOutputStreamを取り出し、
3.出力する
4.ソケットのInputStreamを取り出し、
5.返り値が帰ってくるまで待ち、
6.帰ってきたら適当に処理して
7.処理が終わったらクローズする
ほかの言語でもやることは、大体同じだと思います。
■ソケットプログラム(サーバー)
サーバーの場合は、一度に何人も処理しないといけません。
そこで、Javaの入出力:Socket通信(サーバー側 その3:複数クライアント対応プログラム)。 にあるように、
(1)受け手の入り口となりプログラムでは
1.Threadクラスを生成して
2.渡したい引数があれば、渡して
3.startする(そうすると、スレッドのほうのrunが走る)
をおこない、そこからスレッドによって発生された1つ1つのプログラムでは
1.入力・出力ストリームを取得し
2.読み込み
3.書き出し
4.クローズ
を行います。
■ソケットと、その上と、OSIとの関係
ソケットはOSIによると、5層目のセッションに相当します。
で、その上は、コード変換などを行うプレゼンテーション層、
さらにその上は、アプリケーション層となります。
Javaのソケットプログラムにおいて、Socketの上は、
そのJavaの入出力:Socket通信(サーバー側 その3:複数クライアント対応プログラム)。 のプログラムに
InputStream is1 =socket.getInputStream();
InputStreamReader ir1 = new InputStreamReader(is1);
BufferedReader br1 = new BufferedReader(ir1);
とありますが、socketが5層目、InputStreamReaderは6層目(こいつが、コード変換とかをする)、その上のBufferedReaderとかは、7層目(アプリケーション)になります。
そして、OSIは、下の層がちがっていても、インターフェースが同じなら、上位層は同じものが使えます。
それを敷衍した形になるのですが、ファイルは、ネットワークではないのでOSIモデルにははいりませんが、まあ、5層目と考えると、ファイルの入出力、FileInputStreamは、SocketInputStreamとおなじインターフェースInputStreamを持っているので(ここで言っているインターフェースはjavaのインターフェースの意味でななく、同じ入出力の切り口を持っているのでという意味)、6層目に相当するInputStreamReaderは、どちらも使えます。
それが、Javaの入出力:ファイル以外の入力と、入力時、2ないし3つのクラスを重ねる理由。で書いた、

になってくるわけです。
ソケットの方法は言語(というかライブラリ)によって、差異があります。
今日の話は、その共通部分的なところになります。
実際に書く場合には、言語ごとにしらべないといけません。
ってことで、今日はここまで。