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);
}
}
}