システムプログラム(第6週): echoサービスのクライアント(Java版)

                                       筑波大学 システム情報工学研究科 
                                       コンピュータサイエンス専攻, 電子・情報工学系
                                       新城 靖
                                       <yas@is.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2011/2011-06-01/echo-client-java.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2011/
http://www.coins.tsukuba.ac.jp/~yas/

echoサービスのクライアント(Java版)

Java 言語で記述した echo-client-fdopen-one.c である。
   1:	
   2:	/*
   3:	        EchoClientOne.java -- 文字列を送受信するクライアント(TCP/IP版)
   4:	        ~yas/syspro/ipc/EchoClientOne.java
   5:	        Created on 2004/02/14 21:09:17
   6:	*/
   7:	
   8:	import java.net.*;
   9:	import java.io.*;
  10:	
  11:	class EchoClientOne
  12:	{
  13:	    public static void main(String argv[]) throws IOException {
  14:	        if( argv.length != 3 )
  15:	        {
  16:	            System.err.println("Usage: % java EchoClientOne host port 'message'");
  17:	            System.exit( -1 );
  18:	        }
  19:	        String server = argv[0];
  20:	        int portno = Integer.parseInt( argv[1] );
  21:	        String message = argv[2];
  22:	        echo_client_one( server, portno, message );
  23:	    }
  24:	
  25:	    public static void echo_client_one( String server, int portno, 
  26:	                                        String message )
  27:	        throws IOException
  28:	    {
  29:	        Socket sock = new Socket( server, portno );
  30:	        BufferedReader in = new BufferedReader(
  31:	            new InputStreamReader( sock.getInputStream() ));
  32:	        PrintStream out = new PrintStream( sock.getOutputStream() );
  33:	
  34:	        echo_send_request( out, message );
  35:	        stdout.printf("sent: %d bytes [%s]\n", message.length()+1,message );
  36:	        String rline = echo_receive_request( in );
  37:	        stdout.printf("received: %d bytes [%s]\n",rline.length()+1, rline);
  38:	        in.close();
  39:	        out.close();
  40:	        sock.close();
  41:	    }
  42:	    public static void echo_send_request( PrintStream out, String message )
  43:	    {
  44:	        out.printf("%s\n", message );
  45:	    }
  46:	    public static String echo_receive_request( BufferedReader in )
  47:	        throws java.io.IOException
  48:	    {
  49:	        String rline = in.readLine();
  50:	        return( rline );
  51:	    }
  52:	
  53:	    static java.io.BufferedReader stdin = 
  54:	        new java.io.BufferedReader( new java.io.InputStreamReader(System.in) );
  55:	    static java.io.PrintStream stdout = System.out;
  56:	    static java.io.PrintStream stderr = System.err;     
  57:	}
このプログラムの基本的な部分は、 echo-client-fdopen-one.c と同じである。 以下に、Java のメソッド名と C の関数名の対応を示す。
Java C
new Socket tcp_connect()
new BufferedReader(), new PrintStream() fdopen_sock()
readLine() fgets()
printf() fprintf()
以下に実行例を示す。細かい違いとしては、Java の readLine() では行末の改 行記号が削除されている所である。
$ cp ~yas/syspro/ipc/EchoClientOne.java . [←]
$ javac -encoding EUC-JP EchoClientOne.java [←]
$ java EchoClientOne  [←]
Usage: % java EchoClientOne host port 'message'
$ java EchoClientOne cosmos10.coins.tsukuba.ac.jp 7 hello [←]
sent: 6 bytes [hello]
received: 6 bytes [hello]
$ java EchoClientOne cosmos10.coins.tsukuba.ac.jp 7 exit [←]
sent: 5 bytes [exit]
received: 5 bytes [exit]
$ java EchoClientOne cosmos10.coins.tsukuba.ac.jp 7 quit [←]
sent: 5 bytes [quit]
received: 5 bytes [quit]
$ []

Last updated: 2011/05/29 23:02:25
Yasushi Shinjo / <yas@is.tsukuba.ac.jp>