Newer
Older
21a5116NWP / src / j2 / TimeServer.java
package j2;
// 時刻を答えるサーバプログラムTimeServer.java

import java.io.IOException;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

// TimeServerクラス
public class TimeServer {
	public static void main(String args[]) {
		if (args.length < 2) {
			args = new String[2];
			// ローカルホストからの接続のみを受け付ける場合 "127.0.0.1"
			// 別のホストからの接続も受け付ける場合 "0.0.0.0"
			args[0] = "127.0.0.1";
			args[1] = "9999"; // ポート9999番を開く
		}
		new TimeServer(args[0], args[1]);
	}

	public TimeServer(String bindaddress, String strport) {
		ServerSocket timeServer = null;// サーバ用ソケット
		Socket clientSocket;// ソケットの読み書き用オブジェクト
		PrintStream os;
		String outstr; // 出力データを格納する文字列
		Date d; // 日付時刻処理用オブジェクト

		int port = Integer.parseInt(strport);// 文字列を整数に変換
		try {
			timeServer = new ServerSocket(); // サーバソケットの作成
				// クライアントからの要求を受けるソケットを開く
				timeServer.bind(new InetSocketAddress(bindaddress, port)); // サーバソケットにバインドする=ポートでの待ち受け開始
		} catch (IOException e) {
			System.err.println(e);
			System.err.println("バインド失敗。ポート番号 " + port + " (Bind-address: " + bindaddress + " 向け) がすでにつかわれているようです");
			System.err.println("ポート番号またはバインドアドレスを変更してください。");
			System.exit(1);
		}
		System.out.println("TimeServer started. [" + bindaddress + ":" + port + "]");
		System.out.println("停止するには CTRL+C をおしてください");

		// サーバ側の処理の繰り返し
		while (true) {
			try {
				clientSocket = timeServer.accept(); // 接続がくるまで、ここで待つ
				System.out.println("(TimeServer) accepted (client has connected)");
				System.out.println(clientSocket.getRemoteSocketAddress().toString());
				os = new PrintStream(clientSocket.getOutputStream());

				// 出力用データの作成
				d = new Date();
				outstr = "\n" + "Hello, this is TimeServer.\n" + d.toString() + "\n";
				System.out.println("(サーバ→クライアント) " + outstr);
				// データの出力(1回目)
				os.println(outstr);
				Thread.sleep(3000); // 3秒まつ
				outstr = new Date().toString();
				os.println(outstr); // データの出力(2回目)
				System.out.println("(サーバ→クライアント) " + outstr);
				Thread.sleep(3000); // 3秒まつ
				outstr = "Thank you.";
				os.println(outstr);
				System.out.println("(サーバ→クライアント) " + outstr);
				os.close();
				// 接続終了
				clientSocket.close();
				System.out.println("(TimeServer) クライアントからの接続を閉じました");
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}
	}
}