Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确关闭非阻塞套接字通道?_Java_Sockets_Networking_Nonblocking - Fatal编程技术网

Java 如何正确关闭非阻塞套接字通道?

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

我正在使用Java非阻塞SocketChannel编写一个服务器程序。有时我想发送一条回复消息,然后关闭通道,如下面的代码所示

但是,close()方法会中断write()方法,我得到一个java.nio.channels.ClosedChannelException,消息不会被发送

我可以弹出一个线程,等待1-2秒后再关闭频道,但我觉得制作另一个线程太浪费了

当存在挂起的操作时,关闭SocketChannel的正确方法是什么

String msg = "Wrong password!";
channel.write(ByteBuffer.wrap(msg.getBytes()));
channel.close();
通道。(。(正确,输出到漏极的最大秒数)


请参阅网站上的信息。如前所述,它将导致close()阻塞最多\u秒\u,以便\u输出\u到\u排水秒。

似乎对我不起作用,也许它只是为了阻塞套接字?它只会在阻塞模式下执行,在这种模式下基本上没有必要。他处于非阻塞模式,听起来不对。您必须在关闭频道后进行写入。我有很多这样的代码,但它没有这样做。