当用户单击“连接”按钮时,我的 SwingWorker 的 doInBackground()
创建(并向 OP_ACCEPT
注册)一个新的 ServerSocketChannel
。
当客户端 isAcceptable()
时,SwingWorker
会使用 OP_READ
注册 SocketChannel
。
当用户单击“断开连接”按钮时,SwingWorker
close() ServerSocketChannel
和 selector()
。然而,客户端仍然开放。
问题:如果用户再次单击“连接”,在我看来,上述过程会重复,只是客户端仍处于 OP_READ
模式并且没有被 重新接受>ServerSocketChannel
。
有办法克服这个问题吗? ServerSocketChannel
重新启动是否要求客户端也重新启动?
最佳答案
Does a ServerSocketChannel restart require that clients restart as well?
没有。现有客户端保持连接。他们不会仅仅因为您关闭服务器套接字而经历另一个连接阶段。
与我上面的评论相反,断开连接按钮应该关闭服务器套接字,而不是客户端套接字。但它被贴错标签了。按钮应该是“开始”和“停止”,或者“开始监听”和“停止监听”。由客户端进行连接。
关于java - 当客户端已打开时处理 ServerSocketChannel 重新启动的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12443440/