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 svsock= null ;// サーバ用ソケット
Socket sock ;// ソケットの読み書き用オブジェクト
PrintStream os ;
String outstr ; // 出力データを格納する文字列
Date d ; // 日付時刻処理用オブジェクト
try{
// サーバソケットの作成
svsock = new ServerSocket() ;
// バインドするアドレスとポートを指定
svsock.bind(new InetSocketAddress("0.0.0.0" , 5555)) ; //別のホストからの接続も受け付ける場合
// svsock.bind(new InetSocketAddress("127.0.0.1", 5555)) ; //ローカルホストからのみ受け付ける場合
System.out.println("(TimeServer) 停止するには CTRL+C をおしてください") ;
// サーバ側の処理の繰り返し
while(true){
sock = svsock.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.close() ;
// 接続終了
sock.close() ;
System.out.println("(TimeServer) クライアントからの接続を閉じました") ;
}
} catch(IOException e){
System.out.println("*** Exception ***") ;
System.out.println(e) ;
System.exit(1) ;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}