7月5日Javaゼミ 12.1〜12.2 宿題解答   南 慶典


問題1
クライアントはサーバーに接続して文字列を取得しそれを表示させる、簡単なクライアント/サーバーアプリケーションを作成しなさい。ただしサーバープログラムではコマンドライン引数としてポート番号を、クライアントプログラムではサーバー名とポート番号を指定してください。

問題2
無限ループを実行するサーバー作成し、クライアントから送られてくるdouble型の値を読み取りなさい。読み取った値を2乗し、その結果をクライアントに書き込みなさい。また、double型の値をサーバーアプリケーションに送るクライアントアプリケーションを作成しなさい。double型の値は、クライアントアプリケーションのコマンドライン引数として指定するようにしなさい。



問題1 サーバープログラム

import java.net.*;
import java.io.*;

class Demo{
	public static void main(String[] args){
		try{
			// ポートを取得
			int port = Integer.parseInt(args[0]);
			
			// サーバーソケットを作成する
			ServerSocket ss = new ServerSocket(port);
			
			String s1 = "rensyuuu";
			
			// 無限ループを作成する
			while(true){
				
				// クライアントからの要求を受け取る
				Socket s = ss.accept();

				// クライアントからの要求を受け取る
				OutputStream os = s.getOutputStream();
				DataOutputStream dos = new DataOutputStream(os);
				dos.writeChars(s1);
				
				// ソケットをクローズする
				s.close();
			}
		}
		catch(Exception e){
			System.out.println("Exception: "+e);
		}
	}
}



	クライアントプログラム

import java.net.*;
import java.io.*;

class DemoClient {
	public static void main(String[] args) {
		try{
			
			// サーバーとポートを取得する
			String server = args[0];
			int port = Integer.parseInt(args[1]);
			
			// ソケットを作成する
			Socket s = new Socket(server, port);
			
			// サーバーから文字列を読み取る
			InputStream is = s.getInputStream();
			DataInputStream dis = new DataInputStream(is);
			String s1 = dis.readChars();

			// 結果を表示する
			System.out.println(s1);
			
			// ソケットをクローズする
			s.close();
		}
		catch(Exception e){
			System.out.println("Exception: "+e);
		}
	}

}


問題2 サーバープログラム

import java.io.*;
import java.net.*;

class SquareServer {
  public static void main(String args[]) {
    try {
      // ポートを取得する
      int port = Integer.parseInt(args[0]);

      // サーバーソケットを作成する
      ServerSocket ss = new ServerSocket(port);

      // 無限ループを作成する
      while(true) {
        // 送られてきた要求を受け入れる
        Socket s = ss.accept();

        // クライアントからの値を読み取る
        InputStream is = s.getInputStream();
        DataInputStream dis = new DataInputStream(is);
        double value = dis.readDouble();

        // 入力された値を2乗する
        value *= value;
     
        // 結果をクライアントに書き込む
        OutputStream os = s.getOutputStream();
        DataOutputStream dos = new DataOutputStream(os);
        dos.writeDouble(value);
     
        // ソケットをクローズする
        s.close();
      }
    }
    catch (Exception e) {
      System.out.println("Exception: " + e);
    }
  }
}

	クライアントプログラム

import java.io.*;
import java.net.*;

class SquareClient {
  private final static int BUFSIZE = 20;

  public static void main(String args[]) {
    try {
      // サーバー、ポート、値を取得する
      String server = args[0];
      int port = Integer.parseInt(args[1]);
      double value = Double.valueOf(args[2]).doubleValue();

      // ソケットを作成する
      Socket s = new Socket(server, port);

      // サーバーに値を書き込む
      OutputStream os = s.getOutputStream();
      DataOutputStream dos = new DataOutputStream(os);
      dos.writeDouble(value);

      // サーバーから結果を読み取る
      InputStream is = s.getInputStream();
      DataInputStream dis = new DataInputStream(is);
      value = dis.readDouble();
      
      // 結果を表示する
      System.out.println(value);

      // ソケットをクローズする
      s.close();
    }
    catch(Exception e) {
      System.out.println("Exception: " + e);
    }
  }
}