gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:52 25 4
gpt4 key购买 nike

我对 Java 还很陌生,正在尝试编写发送者 channel 接收器设置的代码,其中 channel 代表传输介质并向数据包引入错误。因此, channel 使用服务器套接字 channel 连接到发送方和接收方。大部分都很好,但是当我尝试读取 channel 内的对象 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;
}

有人能够解释什么引发了异常以及如何纠正它吗?

最佳答案

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

关于java - 尝试从套接字读取时出现非法阻塞模式异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46138414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com