簡體   English   中英

Java - 關閉 ServerSocketChannel

[英]Java - Closing a ServerSocketChannel

我有以下代碼:

 Selector socketSelector = SelectorProvider.provider().openSelector();
ServerSocketChannel serverChannel = ServerSocketChannel.open();
serverChannel.configureBlocking(false);
serverChannel.register(socketSelector, SelectionKey.OP_ACCEPT);
serverChannel.socket().bind(new InetSocketAddress(1331));

new Thread() {
    @Override
    public void run() {
        try {
            Thread.sleep(5000);
            serverChannel.close();

        } catch (InterruptedException | IOException ex) {
        }
    }
}.start();

注意:代碼並不完整,只是一個測試。

此代碼應打開連接端口 1331,運行 5 秒后應通過釋放端口來關閉連接以供使用。 但是,如果我使用這一行:

serverChannel.register(socketSelector, SelectionKey.OP_ACCEPT);

端口是不釋放的,只有我刪除,如果我刪除不能接受客戶。

如何找到一種無需關閉應用程序即可釋放端口的方法?

使用Selector注冊的SelectableChannels具有延遲關閉,僅在下次調用select()時生效。 它記錄在 Javadoc 中某個相當晦澀的地方,我在需要時永遠找不到。 所以你需要在很短的時間內調用select() ,比如 5 秒,如果它返回零則什么都不做。 或者,做任何可能出現的內務處理。

暫無
暫無

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

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