JSch SFTP客户端连接超时、put传输中断对应JSchException有哪些?
两类已知JSchException的区别
com.jcraft.jsch.JSchException: timeout: socket is not established:属于连接建立阶段超时,出现在Session.connect()执行过程中,在你配置的连接超时阈值内,未能和远程服务完成TCP握手、SSH协议协商全流程,属于连接初始化失败场景。com.jcraft.jsch.JSchException: Session.connect: java.net.SocketTimeoutException: Read timed out:属于连接建立后的读写超时,一般出现在SSH会话保活、SFTP通道数据传输过程中,Socket等待远程返回数据的时长超过了你配置的soTimeout阈值,属于运行时连接中断场景。
需捕获的符合重试条件的异常
除上述两类外,你还需要捕获带以下关键词的JSchException,覆盖连接、传输中断的全场景:
- 会话断开类:消息包含
session is down、connection is closed by foreign host、broken pipe - 通道失效类:消息包含
Channel is not opened、SFTP channel is closed - 网络异常封装类:消息嵌套了
SocketException、ConnectException、NoRouteToHostException相关字样
注意事项:
- 捕获时优先做关键词包含匹配,不要做全字匹配,避免JSch不同版本的异常消息细微差异导致漏判
- 不要对所有JSchException都触发重试,类似
Auth fail(认证失败)、Permission denied(权限不足)这类业务逻辑错误,重试无法解决问题,需直接排除
内容的提问来源于stack exchange,提问作者c_anirudh
相关产品推荐
相关产品推荐

