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_Serialization_Network Programming_Inputstream - Fatal编程技术网

Java 尝试从套接字读取时出现非法阻塞模式异常

Java 尝试从套接字读取时出现非法阻塞模式异常,java,sockets,serialization,network-programming,inputstream,Java,Sockets,Serialization,Network Programming,Inputstream,我对Java非常陌生,正在尝试编写一个发送方-通道-接收方设置代码,其中通道表示传输介质,并向数据包引入错误。因此,通道使用服务器套接字通道连接到发送方和接收方。 大多数情况下都很好,但当我尝试读取通道内的对象数据包时,它会抛出IllegalBlockingModeException。发送方抛出似乎是相应的IO异常,“远程主机强制关闭了现有连接”。频道程序中的代码如下(为了简单起见,排除了某些部分): 是否有人能够解释引发异常的原因以及如何纠正它?流正在阻塞。不能在非阻塞模式下使用它们。请参阅J

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


是否有人能够解释引发异常的原因以及如何纠正它?

流正在阻塞。不能在非阻塞模式下使用它们。请参阅Javadoc。

流正在阻塞。不能在非阻塞模式下使用它们。查看Javadoc。

事实上,我在Javadoc中看到了这一点。因此,我要求的是如何纠正这一点?如果不使用流,如何读取套接字?可以使用流读取套接字,但不能在非阻塞模式下读取。序列化和NIO非常不合适。决定。事实上,我已经在Javadoc中看到了这一点。因此,我要求的是如何纠正这一点?如果不使用流,如何读取套接字?可以使用流读取套接字,但不能在非阻塞模式下读取。序列化和NIO非常不合适。决定。一个或另一个。
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...
private static Packet readPacket(SocketChannel sc) throws IOException, 
ClassNotFoundException {
    ObjectInputStream in = new 
    ObjectInputStream(sc.socket().getInputStream());
    Packet packet = (Packet) in.readObject();
    return packet;
}