首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接被远程主机强制关闭。

连接被远程主机强制关闭。
EN

Stack Overflow用户
提问于 2014-06-09 17:01:07
回答 2查看 29.8K关注 0票数 5

我在我的jSCSI实现中有一个jSCSI,当我试图打开一个大小大于4GB的驱动程序时,它就是断开连接。iscsi说BasicHeaderSegment.BHS_FIXED_SIZE可能是48,所以使用这个位置我可以读取通道上的字节。java文档显示了5种类型的错误,但我的应用程序抛出了最后一个没有说明具体信息的错误。

  1. NotYetConnectedException
  2. ClosedChannelException
  3. AsynchronousCloseException
  4. ClosedByInterruptException
  5. IOException

代码:

代码语言:javascript
复制
public final int read(final SocketChannel sChannel) throws InternetSCSIException, IOException, DigestException {
// read Basic Header Segment first to determine the total length of this
// Protocol Data Unit.
clear();

final ByteBuffer bhs = ByteBuffer.allocate(BasicHeaderSegment.BHS_FIXED_SIZE);
int len = 0;
while (len < BasicHeaderSegment.BHS_FIXED_SIZE) {
    int lens = sChannel.read(bhs);
    if (lens == -1) {
        // The Channel was closed at the Target (e.g. the Target does
        // not support Multiple Connections)
        // throw new ClosedChannelException();
        return lens;
    }
    len += lens;
    LOGGER.trace("Receiving through SocketChannel: " + len + " of maximal " + BasicHeaderSegment.BHS_FIXED_SIZE);

}
bhs.flip();

错误:

代码语言:javascript
复制
java.io.IOException: An existing connection was forcibly closed by the remote host
    at sun.nio.ch.SocketDispatcher.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
    at sun.nio.ch.IOUtil.read(IOUtil.java:197)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:379)
    at org.jscsi.parser.ProtocolDataUnit.read(ProtocolDataUnit.java:417)
    at org.jscsi.target.connection.TargetSenderWorker.receiveFromWire(TargetSenderWorker.java:145)
    at org.jscsi.target.connection.Connection$TargetConnection.receivePdu(Connection.java:217)
    at org.jscsi.target.connection.phase.TargetFullFeaturePhase.execute(TargetFullFeaturePhase.java:96)
    at org.jscsi.target.connection.Connection$TargetConnection.call(Connection.java:264)
    at org.jscsi.target.connection.Connection$TargetConnection.call(Connection.java:79)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
[pool-9-thread-1] INFO org.jscsi.target.connection

预先谢谢你,费利佩

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-09 18:52:45

您的问题描述不正确。SocketChannel不是关闭的:连接是关闭的;当您试图打开连接时,它不会发生:它是在您从它读取时发生的。

这通常是在对等方已经关闭连接之后发送一些东西的结果,而这反过来又意味着您以前发送了一些它不理解的东西。

票数 4
EN

Stack Overflow用户

发布于 2014-06-10 07:58:54

好像另一边因为某种问题而切断了你的联系。假设您正在开发启动器,您应该检查目标(服务器)系统日志。

你能解释一下4GB的评论吗?我的意思是,“打开一个大小大于4GB的驱动器”到底是什么意思,什么驱动?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24125120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档