Java 当客户端已打开时,处理给定ServerSocketChannel重新启动的连接

Java 当客户端已打开时,处理给定ServerSocketChannel重新启动的连接,java,client,serversocket,socketchannel,Java,Client,Serversocket,Socketchannel,当用户单击“连接”按钮时,我的SwingWorker的doInBackground()创建(并向OP_ACCEPT注册)一个新的ServerSocketChannel 当客户端isAcceptable()时,SwingWorker使用OP\u READ注册SocketChannel 当用户单击“断开连接”按钮时,SwingWorker关闭ServerSocketChannel和selector()。但是,客户端仍然是开放的 问题:如果用户再次单击“连接”,我认为上述过程会重复,但客户端仍处于OP

当用户单击“连接”按钮时,我的SwingWorker的
doInBackground()
创建(并向
OP_ACCEPT
注册)一个新的
ServerSocketChannel

当客户端
isAcceptable()
时,
SwingWorker
使用
OP\u READ
注册
SocketChannel

当用户单击“断开连接”按钮时,
SwingWorker
关闭
ServerSocketChannel
selector()
。但是,客户端仍然是开放的

问题:如果用户再次单击“连接”,我认为上述过程会重复,但客户端仍处于
OP_READ
模式,并且未被
ServerSocketChannel
新接受

有没有办法克服这个问题?
ServerSocketChannel
重新启动是否要求客户端也重新启动

ServerSocketChannel重新启动是否也需要客户端重新启动

否。现有客户端仍保持连接。他们不会因为关闭服务器套接字而经历另一个连接阶段


与我上面的评论相反,断开连接按钮应该关闭服务器套接字,而不是客户端套接字。但它被贴错了标签。按钮应为“开始”和“停止”,或“开始收听”和“停止收听”。连接的是客户。

我一点都不懂。为什么要为服务器编写GUI?为什么用户可以控制ServerSocket的创建时间?当用户单击断开连接按钮时,您肯定应该关闭客户端连接,而不是服务器套接字?但是,为什么用户也能控制它呢?@EJP为什么服务器软件的用户可以命令服务器何时开始和停止是如此令人费解呢?@EJP但我接受你的建议,客户端连接应该关闭!因为在大多数情况下,既没有“服务器的用户”,也没有GUI。服务器根据应用程序协议启动、侦听、接受连接、处理连接、在完成连接后断开连接、停止侦听并停止。它在开始侦听之前和停止侦听之后还做什么?服务器的用户还可以选择编辑服务器设置(例如主机、端口)和编辑客户端访问的主数据表。请参见此处的屏幕截图:感谢您对评论的更正。我现在同意,服务器应用程序的用户选择开始或停止监听是否有任何意义值得怀疑。