簡體   English   中英

使用套接字接受客戶端關閉服務器

[英]Closing server with socket accepting clients

我試圖在60秒后停止我的服務器接受客戶端,我實現了以下情況:沒有人連接到服務器,它確實在60秒后通過setSoTimeout方法停止,但是我應該如何在60秒后停止服務器有人連接嗎?

public void start() {
    try {
        final InetAddress address = InetAddress.getByName(host);
        serverSocket = new ServerSocket(port, 50, address);
        serverSocket.setSoTimeout(60 * 1000);
        while (!Thread.currentThread().isInterrupted()) {
            final Socket newSocket = serverSocket.accept();
            final ClientContainer newClient = new ClientContainer(clientID.getAndIncrement(), newSocket);
            executorService.execute(new ClientContainerRunnable(newClient, this));
        }
    } catch (SocketTimeoutException e) {
        System.out.println("timeout expired");
    } catch (IOException e1) {
        System.out.println("Server stopped");
    }
}

如果要阻止客戶端連接,可以關閉服務器套接字。 如果您希望在客戶端連接60秒后發生這種情況,則可以使用預定的執行程序服務將服務器套接字的關閉預定在未來60秒內進行

 Executors.newSingleThreadScheduledExecutor().schedule(() -> serverSocket.close(), 60, TimeUnit.SECONDS);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM