gpt4 book ai didi

java - 如何断开客户端与 NIO 服务器套接字的连接

转载 作者:行者123 更新时间:2023-11-29 05:12:57 25 4
gpt4 key购买 nike

我正在开发一个与许多客户端相连的服务器。我需要知道客户端何时与服务器断开连接。所以每个客户端都向服务器发送一个特定的字符。如果两秒后没有收到字符,那么我应该断开服务器与客户端的连接(释放为此客户端分配的资源)。

这是我的服务器的主要代码:

public EchoServer(int port) throws IOException {
this.port = port;
hostAddress = InetAddress.getByName("127.0.0.1");
selector = initSelector();
loop();
}

private Selector initSelector() throws IOException {
Selector socketSelector = SelectorProvider.provider().openSelector();

ServerSocketChannel serverChannel = ServerSocketChannel.open();
serverChannel.configureBlocking(false);

InetSocketAddress isa = new InetSocketAddress(hostAddress, port);
serverChannel.socket().bind(isa);
serverChannel.register(socketSelector, SelectionKey.OP_ACCEPT);

return socketSelector;
}

private void loop() {
for (;true;) {
try {
selector.select();
Iterator<SelectionKey> selectedKeys = selector.selectedKeys()
.iterator();
while (selectedKeys.hasNext()) {
SelectionKey key = selectedKeys.next();
selectedKeys.remove();

if (!key.isValid()) {
continue;
}

// Check what event is available and deal with it
if (key.isAcceptable()) {
accept(key);
} else if (key.isReadable()) {
read(key);
} else if (key.isWritable()) {
write(key);
}
}
Thread.sleep(1000);
timestamp++;
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}

第一个问题是,我用来识别在线客户端(每秒发送特定消息)的方法是否是一种好方法?

如果是好的,我如何检测 SelectionKey 是否与女巫客户端相关,然后如何断开与服务器的 key ?

最佳答案

The first question is that, whether the way that I used in order to recognizing online clients (sending specific message every second) is a good approach or not?

不是在回显服务器的情况下。在诸如此类的许多情况下,您所需要做的就是适本地识别流结束和连接失败。

how can I detect with SelectionKey is related to which client

SelectionKey有一个channel,channel有一个socket,Socket有一个remote IP address:port。这就是您所需要的。

and then how can I disconnect the key from server?

当您从 read() 方法或任何 IOException 读取或写入时获得 -1 时关闭 channel 。

关于java - 如何断开客户端与 NIO 服务器套接字的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27674808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com