簡體   English   中英

Java Server套接字中斷如何

[英]Java Server Socket Interrupt How to

如何停止正在監聽客戶端的服務器套接字。 我的代碼如下所示

 private ServerSocket serverSocket;

class ServerThread implements Runnable {

    private BufferedReader input;
    public void run() {
    Socket socket = null;

        try {
            serverSocket = new ServerSocket(SERVE_LISTEN_RPORT);
        } catch (IOException e) {
            e.printStackTrace();
        }

        while (!Thread.currentThread().isInterrupted()) {

            try {

                socket = serverSocket.accept();
                try {

        this.input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                } catch (IOException e) {
                    e.printStackTrace();
                }

                try {
                     String read = input.readLine();
                                 //Do something
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }


             try {
              serverSocket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }
}

當我從另一個線程收到命令時,我需要停止該線程。 我已經播出了這個問題,但不知道如何實現。

這是一個如何從其他線程關閉套接字的示例:

private static volatile ServerSocket serverSocket;

public static void main(String[] args) throws InterruptedException, IOException {
    Thread serverThread = new Thread(new ServerThread());
    serverThread.start();
    Thread.sleep(1000); // wait a  bit, then close
    serverSocket.close();
}

static class ServerThread implements Runnable {

    private BufferedReader input;

    public void run() {
        try {
            serverSocket = new ServerSocket(25);
            while (true) {
                Socket socket = serverSocket.accept();
                // client request handling logic
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

服務器套接字應在run()方法外部,並應由線程共享

現在,當您需要中斷正在調用socket.accept()的線程時,另一個線程可以調用socket.close()accept()將引發異常。

暫無
暫無

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

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