有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

尝试从socket读取时发生java非法阻止模式异常

我对Java非常陌生,正在尝试编写一个发送方-通道-接收方设置代码,其中通道表示传输介质,并向数据包引入错误。因此,通道使用服务器socket通道连接到发送方和接收方。 大多数情况都很好,但是当我尝试读取通道内的对象Packet时,它抛出IllegalBlockingModeException。发送方抛出似乎是相应的IO异常,“远程主机强制关闭了现有连接”。Channel程序中的代码如下(为了简单起见,排除了某些部分):

Set<SelectionKey> selectedKeys = selector.selectedKeys();
Iterator<SelectionKey> keyIterator = selectedKeys.iterator();
while (keyIterator.hasNext()) {
    SelectionKey key = keyIterator.next();
    keyIterator.remove();
    if (key.isAcceptable()) {
        SocketChannel sc = ((ServerSocketChannel) key.channel()).accept();
        sc.configureBlocking(false);
        sc.register(selector, SelectionKey.OP_READ);
    }
    if (key.isReadable()) {
        SocketChannel sc = (SocketChannel) key.channel();
        sc.configureBlocking(false);
        Packet packet = readPacket(sc);
        sc.close();
        // do things with the packet...

其中readPacket定义如下:

private static Packet readPacket(SocketChannel sc) throws IOException, 
ClassNotFoundException {
    ObjectInputStream in = new 
    ObjectInputStream(sc.socket().getInputStream());
    Packet packet = (Packet) in.readObject();
    return packet;
}

是否有人能够解释抛出异常的原因以及如何纠正异常


共 (1) 个答案

  1. # 1 楼答案

    溪流阻塞。不能在非阻塞模式下使用它们。参见Javadoc