クライアントプログラムの作成
さきほど,telnet を使って手動でおこなったクライアント側の動作を実行す
るプログラムを Java で書いてみることにしよう.まず,ネットワークを扱う
ためのクラスは,
java.net パッケージ中に含まれている.TCPで通信をする時のクライアン
トプログラムを作る際には,まず,ホスト名とポート番号をしていして,Socket
クラスのインスタンスを作り,できたソケットから入出力ををおこなうための,
ストリームを作る.実際の例をみてみよう.
java ホスト名 ドキュメント名
とやって,HTTPファイルを標準出力に表示するプログラムを作ってみる.
// 入出力ストリームを使うため java.io.* を import することが必要.
import java.io.*;
// Socketを使うため java.net.* を import することが必要.
import java.net.*;
public class HttpTest{
// 途中で IOException が起きるので throws IOException が必要.
public static void main(String[] args) throws IOException{
// WWWサーバのホスト名を入れる変数
String webserver=args[0];
// WWWサーバと通信する際のポート番号は通常80番
int http_port=80;
// Socket クラスの変数を宣言
Socket sock;
// TCP通信をおこなう際の入力ストリーム
BufferedReader dis;
// TCP通信をおこなう際の出力ストリーム
PrintWriter ps;
// WWWサーバプログラムと通信するためのソケットを作成
sock=new Socket(webserver,http_port);
// 作成したソケットから入力用のストリームを作成
dis=new BufferedReader(new InputStreamReader(sock.getInputStream()));
// 作成したソケットから出力用のストリームを作成
ps=new PrintWriter(sock.getOutputStream(),true);
// WWWサーバに,「GET ドキュメント名」という文字列を送信
ps.println("GET "+args[1]);
// 行入力用の文字列の宣言
String s=null;
// ソケットにつながった入力ストリームから
// 入力がある間(WWWサーバ側が通信を切ると null が返る)ループを回る
while((s=dis.readLine())!=null){
// 文字列を表示する
System.out.println(s);
}
// ソケットを閉じる.
sock.close();
}
}
これを実行してみると以下のようになる.
dell% java HttpTest dell.tanaka.ecc.u-tokyo.ac.jp /index.html
<HTML><HEAD>
<TITLE>Test Page for Apache</TITLE>
</HEAD><BODY>
<H1>It Worked!</H1>
If you can see this, then your
<A HREF="http://www.apache.org/">Apache</A> installation was
successful. You may now add content to this directory and
replace this page.
<P>
The Apache <A HREF="manual/index.html">documentation has been
included with this distribution.</A>
<P>
You are free to use the image below on an Apache-powered web
server. Thanks for using Apache!
<P>
<img src="apache_pb.gif">
</BODY></HTML>
簡単なサーバプログラム