【问题标题】:(Java server socket) send message every minute to a client(Java 服务器套接字)每分钟向客户端发送消息
【发布时间】:2016-03-07 15:08:42
【问题描述】:

我正在尝试使用 java 套接字创建一个服务器(允许多个客户端请求)。我的问题是我想这样做,所以当客户端发送请求时,服务器每分钟回复一次服务器时间。我希望服务器每分钟永远给出时间,直到客户端停止请求进程(例如,使用“Ctrl+C”组合键在终端中停止进程)。这是我已经编写的代码,但我不确定如何实现“给定时间每分钟循环”。有什么更好的方法?

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

}

谢谢!

【问题讨论】:

  • 也许是Thread.sleep()。恕我直言,如果你想每分钟发送一些东西,让客户端每分钟询问一次会更容易,它会阻止你维护一个打开的套接字。
  • 我想 node.js 会对此有所帮助。因为对于一致的连接和一次处理多个请求,node.js 比任何其他语言都更好。

标签: java sockets server client periodicity


【解决方案1】:

我会喜欢的:)

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-08-31
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2016-07-13
    相关资源
    最近更新 更多