Java 如何正确关闭非阻塞套接字通道?
我正在使用Java非阻塞SocketChannel编写一个服务器程序。有时我想发送一条回复消息,然后关闭通道,如下面的代码所示 但是,close()方法会中断write()方法,我得到一个java.nio.channels.ClosedChannelException,消息不会被发送 我可以弹出一个线程,等待1-2秒后再关闭频道,但我觉得制作另一个线程太浪费了 当存在挂起的操作时,关闭SocketChannel的正确方法是什么Java 如何正确关闭非阻塞套接字通道?,java,sockets,networking,nonblocking,Java,Sockets,Networking,Nonblocking,我正在使用Java非阻塞SocketChannel编写一个服务器程序。有时我想发送一条回复消息,然后关闭通道,如下面的代码所示 但是,close()方法会中断write()方法,我得到一个java.nio.channels.ClosedChannelException,消息不会被发送 我可以弹出一个线程,等待1-2秒后再关闭频道,但我觉得制作另一个线程太浪费了 当存在挂起的操作时,关闭SocketChannel的正确方法是什么 String msg = "Wrong password!"; ch
String msg = "Wrong password!";
channel.write(ByteBuffer.wrap(msg.getBytes()));
channel.close();
通道。(。(正确,输出到漏极的最大秒数)
请参阅网站上的信息。如前所述,它将导致close()阻塞最多\u秒\u,以便\u输出\u到\u排水秒。似乎对我不起作用,也许它只是为了阻塞套接字?它只会在阻塞模式下执行,在这种模式下基本上没有必要。他处于非阻塞模式,听起来不对。您必须在关闭频道后进行写入。我有很多这样的代码,但它没有这样做。