Java 异步socketchannel读取永远不会完成。

Java 异步socketchannel读取永远不会完成。,java,Java,我正在试验NIO2,遇到了一个问题 以下是我使用的代码: ByteBuffer buffer = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE); channel.read(buffer, null, new CompletionHandler<Integer, Object>() { @Override public void completed(Integer result, Object attachme

我正在试验NIO2,遇到了一个问题

以下是我使用的代码:

ByteBuffer buffer = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE);
    channel.read(buffer, null, new CompletionHandler<Integer, Object>() {
        @Override
        public void completed(Integer result, Object attachment) {
            Packet packet = new Packet(buffer.getInt(), buffer);
            PacketHandler handler = PacketHandler.forOpcode(packet.getOpcode());
            if(!Objects.isNull(handler)) {
                handler.handle(channel, packet);
            } else {
                System.out.println("Unexpected opcode received from client. Opcode: " + packet.getOpcode());
            }
        }

        @Override
        public void failed(Throwable exc, Object attachment) {
            System.out.println("DEBUG A");
            exc.printStackTrace();
        }
    });
即使客户端写入数据,服务器也永远无法完成读取。我还确保(默认缓冲区大小)等于发送的缓冲区大小,以确定这是否是问题所在,但功能上仍然没有任何更改

每当我断开客户端的连接(目前正在使用线程使其保持活动状态,完全没有任何原因),我都会从
#failed

java.io.IOException: The specified network name is no longer available.
at sun.nio.ch.Iocp.translateErrorToIOException(Iocp.java:309)
at sun.nio.ch.Iocp.access$700(Iocp.java:46)
at sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:399)
at java.lang.Thread.run(Thread.java:745)

你没有发送任何东西。在调用
write()、
compact()
之前,您需要翻转()缓冲区。

为什么?你能解释一下吗?
java.io.IOException: The specified network name is no longer available.
at sun.nio.ch.Iocp.translateErrorToIOException(Iocp.java:309)
at sun.nio.ch.Iocp.access$700(Iocp.java:46)
at sun.nio.ch.Iocp$EventHandlerTask.run(Iocp.java:399)
at java.lang.Thread.run(Thread.java:745)