2016-03-07 103 views
0

我試圖使用java套接字製作服務器(允許多個客戶端請求)。我的問題是,我想讓客戶端發送請求時,服務器每分鐘回覆一次服務器時間。並且我希望服務器每分鐘給予一次永久,直到客戶端停止請求過程(例如,使用「Ctrl + C」組合鍵在終端中停止進程)。這是我已經編寫的代碼,但我不確定如何實現「每分鐘給予時間循環」。有什麼更好的方法來做到這一點?(Java服務器套接字)每分鐘向客戶端發送消息

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

} 

謝謝!

+0

也許用'的Thread.sleep()'。如果你想每分鐘發一些東西,那麼讓客戶每分鐘都問一次會更容易,這會阻止你維護一個打開的套接字。 –

回答

-2

我想爲此目的node.js將有所幫助。因爲爲了一致的連接和一次處理多個請求,node.js比任何其他語言都更好。

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

}

相關問題