FTPFile[] fs = ftp.listFiles();报错

2024-12-19 22:57:11
推荐回答(3个)
回答1:

代码贴出来,以便定位问题。

java.net.SocketException: Software caused connection abort: recv failed

原因:服务端将连接关闭了(可能发生了异常),但客户端还在接收数据。

总结产生原因,在服务端/客户端单方面关闭连接的情况下,另一方依然以为
tcp连接仍然建立,试图读取对方的响应数据,导致出现
Software caused connection abort: recv failed的异常.

因此在receive数据之前,要先判断连接状态.
通过inputstream的available()方法来判断,是否有响应结果.
如果available()的返回值为0,说明没有响应数据,可能是对方已经断开连接,
如果available()的返回值大于0,说明有响应数据.
另外值得注意的是available()返回的值是非堵塞的,可以被多个线程访问

回答2:

试一下设置本地主动被动模式
client.enterLocalPassiveMode()被动 or
client.enterLocalActiveMode()主动

回答3:

请问一下您解决这个问题了么? 我也报了同样的错误