Newer
Older
NWP / src / j2 / TimeServer.java
@Motoki Miura Motoki Miura on 21 Aug 2020 2 KB server
package j2;
// 時刻を答えるサーバプログラムTimeServer.java
// このプログラムはポート番号5555番で動作するサーバです
// クライアントから接続がきたら、一方的に時刻を返します
// このプログラムを停止させるにはコントロールCを入力してください
// 使い方java TimeServer

// ライブラリの利用
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クラス
class TimeServer{
	public static void main(String args[]){
		ServerSocket ssock = null ;// サーバ用ソケット
		Socket sock ;// ソケットの読み書き用オブジェクト
        PrintStream os;
		String outstr ;// 出力データを格納する文字列
		Date d ;// 日付時刻処理用オブジェクト

		try{
			// サーバソケットの作成
			ssock = new ServerSocket() ;
			// バインドするアドレスとポートを指定
			ssock.bind(new InetSocketAddress("127.0.0.1", 5555));
			
			System.out.println("(TimeServer) 停止するにはCTRL+Cをおしてください");
			// サーバ側の処理の繰り返し
			while(true){
				sock = ssock.accept() ;//接続がくるまで待つ
				System.out.println("(TimeServer) accepted (client has connected)");
				System.out.println(sock.getRemoteSocketAddress().toString());
				os = new PrintStream(sock.getOutputStream());
				// 出力用データの作成
				d = new Date() ;
				outstr = "\n"
					+ "Hello, this is TimeServer.\n"
					+ d.toString() + "\n";
				System.out.println("(Server-side message) "+ outstr);
				// データの出力(1回目)
				os.println(outstr);
				Thread.sleep(3000); // 3秒まつ
				outstr = new Date().toString();
				os.println(outstr); // データの出力(2回目)
				System.out.println("(Server-side message) "+ outstr);
				Thread.sleep(3000); // 3秒まつ
				outstr = "Thank you.";
				os.println(outstr);
				System.out.println("(Server-side message) "+ outstr);
//				os.flush();
				os.close();
				// 接続終了
				sock.close() ;
			}
		} catch(IOException e){
			System.out.println("*** Exception ***");
			System.out.println(e);
			System.exit(1) ;
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}