クライアントプログラムの作成


さきほど,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();
  }
}
これを実行してみると以下のようになる.

ktanaka@ux019 java HttpTest user.ecc.u-tokyo.ac.jp /index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
 <HEAD>
  <TITLE>ECCSユーザーのための実験用WEBサーバー</TITLE>
 </HEAD>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -
 <BODY  BGCOLOR="#FFFFFF"
  TEXT="#000000"
  LINK="#0000FF"
  VLINK="#000080"
  ALINK="#FF0000">

 <img src="ecc.gif">
  <H1 ALIGN="CENTER">  ECCSユーザーのための実験用WEBサーバー  </H1>
  <H2 align="center"><a href="http://apache.ecc.u-tokyo.ac.jp/">
  Apache1.3.27</a> running on <a href="http://www.sun.co.jp/software/solaris/el/index.html">x86 Solaris8</a>  </H2>
<UL>
<LI><H2><A HREF="http://www.ecc.u-tokyo.ac.jp/announce/2002/04/18_userecc.htmCAUTION</a></H2>
<LI><H2><A HREF="charset.html">About Character Set</a></H2>
<LI><H2><A HREF="http://www.ecc.u-tokyo.ac.jp/guide/web/web.html">実験についてのアナウンス></H2>
<LI><H2><A HREF="end.html">実験用WEBサーバーの利用中止手続きについて</A></H2>
<LI><H2><A HREF="/userslist/">実験参加者リスト</A></H2>
<LI><H2><A HREF="manual/index.html">Apacheに関するドキュメント</A></H2>
<LI><H2><A HREF="/server-status">現在のサーバーの状態</A> only from inside EC/H2>
<LI><H2><A HREF="/server-info">現在のサーバーの設定</A> only from inside ECCS2>
<LI><H2><A HREF="/logs">ログ</a> only from inside ECCS</H2>
  <DIV ALIGN="CENTER">
   <IMG SRC="apache_pb.gif" ALT="apachelogo">
  </DIV>
  <DIV ALIGN="CENTER">

   <IMG SRC="pbsANIMloop.gif" ALT="solarislogo">
  </DIV>
</UL>
<hr>
<a mailto="www-admin@ecc.u-tokyo.ac.jp">www-admin@ecc.u-tokyo.ac.jp</a>
 </BODY>
</HTML>
次に進む