0

Java ソケットを使用して (複数のクライアント要求を許可する) サーバーを作成しようとしています。私の問題は、クライアントがリクエストを送信すると、サーバーが1分ごとにサーバー時間を返すようにしたいということです。そして、クライアントがリクエストプロセスを停止するまで、サーバーに毎分永遠に時間を与えてもらいたいです(たとえば、「Ctrl + C」キーの組み合わせを使用して端末でプロセスを停止します)。これは私がすでに書いたコードですが、「give-time-each-minute loop」の実装方法がわかりません。それを行うより良い方法は何ですか?

public class Server {

public static void main(String args[]) throws IOException {
    final int portNumber = Integer.parseInt(args[0]);
    System.out.println("Initializing server socket at port" + portNumber);
    ServerSocket serverSocket = new ServerSocket(portNumber);
    while (true) {
        Socket socket = serverSocket.accept();
        OutputStream os = socket.getOutputStream();
        PrintWriter pw = new PrintWriter(os, true);

// Here I want to introduce code to give the client the current
// server time once each minute.
        // String time = getTime();
        // pw.println("Current server time is: " + time);
        // ...

        pw.close();
        socket.close();
    }
}

public String getTime(){
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    String stringTime = sdf.format(date);
    return stringTime;
    }

}

ありがとうございました!

4

1 に答える 1

0

私はそれのようにします:)

public class Server {

public static void main(String args[]) throws IOException {
final int portNumber = Integer.parseInt(args[0]);
System.out.println("Initializing server socket at port" + portNumber);
ServerSocket serverSocket = new ServerSocket(portNumber);
long mainTime = System.currentTimeMillis()/1000;
while (true) {
    Socket socket = serverSocket.accept();
    OutputStream os = socket.getOutputStream();
    PrintWriter pw = new PrintWriter(os, true);

    if((System.currentTimeMillis()/1000-mainTime)%60>1)){
            String time = getTime();
            pw.println("Current server time is: " + time);
    }

    pw.close();
    socket.close();
    }
}

public String getTime(){
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
    String stringTime = sdf.format(date);
    return stringTime;
    }

}

于 2016-03-07T15:39:03.213 に答える