【发布时间】:2018-04-29 04:12:36
【问题描述】:
在LOCAL_PASSIVE_MODE 中使用 Apache FTPClient 引发异常。该过程是从远程站点的 PC 通过卫星连接运行的,我知道这不太稳定。相同的代码在与同一台服务器的稳定连接上完美运行,但我不确定差异是来自连接的稳定性还是速度(即服务器配置的超时)
我的问题如下:
- 是否一定是远程主机关闭了连接(如异常中所述),或者中断的 Internet 连接是否会产生相同的异常?
- 如果 Internet 连接中断确实会导致此异常,我该如何参数化 FTPClient 或底层 Socket 以重试并恢复连接?
- 如何测试连接是否被远程服务器关闭或中断?
FTPClient 配置为:
- 连接超时:10 分钟
- 数据超时:10 分钟
- 保持活动状态:已启用
- 每 10 秒发送一次保持活动信号
- 从服务器超时保持活动回复:10 分钟
- FTP 缓冲区大小:1024 x 1024
我正在等待接收服务器配置文件和服务器日志。
堆栈跟踪如下:
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(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:317)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:45)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:683)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:659)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:648)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1120)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
【问题讨论】: