![](/img/trans.png)
[英]java.nio.channels.ServerSocketChannel not closing properly
[英]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.