【发布时间】:2017-09-10 07:42:42
【问题描述】:
我对 Java 还是很陌生,正在尝试编写发送者通道接收器设置,其中通道代表传输介质并将错误引入数据包。因此,通道使用服务器套接字通道连接到发送方和接收方。
大部分都很好,但是当我尝试在频道中读取对象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;
}
有人能解释一下是什么引发了异常以及如何纠正它吗?
【问题讨论】:
标签: java sockets serialization network-programming inputstream