FTPFile[] fs = ftp.listFiles();报错 20
用java写了一个从ftp服务器上下载文件的方法,一直不报错,调试了一下,就是在:FTPFile[]fs=ftp.listFiles();报错,具体错误是:java.ne...
用java写了一个从ftp服务器上下载文件的方法,一直不报错,调试了一下,就是在:FTPFile[] fs = ftp.listFiles();报错,具体错误是:java.net.SocketException: Software caused connection abort: recv failed。
我用的是远程ftp服务器,在cmd里面能够正常登录和查看里面的文件,网上搜了很多,都没有什么鸟用,请哪位大神指点一下,我想知道错在哪了,要怎么改代码。很急…… 展开
我用的是远程ftp服务器,在cmd里面能够正常登录和查看里面的文件,网上搜了很多,都没有什么鸟用,请哪位大神指点一下,我想知道错在哪了,要怎么改代码。很急…… 展开
3个回答
展开全部
代码贴出来,以便定位问题。
java.net.SocketException: Software caused connection abort: recv failed
原因:服务端将连接关闭了(可能发生了异常),但客户端还在接收数据。
总结产生原因,在服务端/客户端单方面关闭连接的情况下,另一方依然以为
tcp连接仍然建立,试图读取对方的响应数据,导致出现
Software caused connection abort: recv failed的异常.
因此在receive数据之前,要先判断连接状态.
通过inputstream的available()方法来判断,是否有响应结果.
如果available()的返回值为0,说明没有响应数据,可能是对方已经断开连接,
如果available()的返回值大于0,说明有响应数据.
另外值得注意的是available()返回的值是非堵塞的,可以被多个线程访问
java.net.SocketException: Software caused connection abort: recv failed
原因:服务端将连接关闭了(可能发生了异常),但客户端还在接收数据。
总结产生原因,在服务端/客户端单方面关闭连接的情况下,另一方依然以为
tcp连接仍然建立,试图读取对方的响应数据,导致出现
Software caused connection abort: recv failed的异常.
因此在receive数据之前,要先判断连接状态.
通过inputstream的available()方法来判断,是否有响应结果.
如果available()的返回值为0,说明没有响应数据,可能是对方已经断开连接,
如果available()的返回值大于0,说明有响应数据.
另外值得注意的是available()返回的值是非堵塞的,可以被多个线程访问
更多追问追答
追问
追答
在ftp.reveiveFile前调用ftp.getStatus();如果返回异常,那么就会抛出:FTPConnectionClosedException
这个方法用法如下:
public String getStatus()
throws IOException
Issue the FTP STAT command to the server.
Returns:
The status information returned by the server.
Throws:
FTPConnectionClosedException - If the FTP server prematurely closes the connection as a result of the client being idle or some other reason causing the server to send FTP reply code 421. This exception may be caught either as an IOException or independently as itself.
IOException - If an I/O error occurs while either sending a command to the server or receiving a reply from the server.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |