• Java连接FTP服务器上传文件报错


    问题描述

    如标题描述的那样,借用同事的工具类,用来上传文件到FTP上面。我在连接FTP服务器上传文件时报错,为什么要标明时上传呢,请看报错:
    在这里插入图片描述
    注意红框区域,可以明显知道,我是成功连接到FTP服务器上的,而且切换目录成功了。但上传文件时却报错连接超时?问题在哪里?
    我用的依赖:

    		<dependency>
                <groupId>commons-netgroupId>
                <artifactId>commons-netartifactId>
                <version>1.4.1version>
            dependency>
    

    问题排查

    防火墙未关闭?

    网上有人说是防火墙未关闭,可我的没开过
    在这里插入图片描述
    服务器上是关的?也不可能啊。同事访问是正常的。

    没进入被动模式?

    这就更不可能了
    在这里插入图片描述
    有人说进入被动模式的位置应该要在连接之前,如果你点开enterLocalPassiveMode方法,你就知道这是不对的了。至少不是我这个问题的解决方案。
    在这里插入图片描述
    就是简单设置了三个值而已

    断点调试

    还是断点打起来,从报错开始看

    java.net.ConnectException: Connection timed out: connect
    	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    	at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    	at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    	at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    	at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    	at java.net.Socket.connect(Socket.java:589)
    	at java.net.Socket.connect(Socket.java:538)
    	at java.net.Socket.<init>(Socket.java:434)
    	at java.net.Socket.<init>(Socket.java:211)
    	at org.apache.commons.net.DefaultSocketFactory.createSocket(DefaultSocketFactory.java:53)
    	at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:513)
    	at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:388)
    	at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1388)
    

    简化一下,看到出错的问题是在这里。

    DefaultSocketFactory.createSocket(DefaultSocketFactory.java:53)
    FTPClient._openDataConnection_(FTPClient.java:513)
    FTPClient.__storeFile(FTPClient.java:388)
    FTPClient.storeFile(FTPClient.java:1388)
    

    断点调试进去,从下向上看一下

    第一个是实际调用的存储方法 如下
    在这里插入图片描述
    再点进去定位到这里,这里就是与服务器建立数据连接
    在这里插入图片描述
    再进去 ,定位给到以下代码段,该段代码的作用是,以被动模式创建本机与服务器端的套接字连接
    在这里插入图片描述
    到这里已经就感觉到有点不对了,为什么创建连接会不对呢
    再进去 看到以下代码
    在这里插入图片描述
    这里问题就很明显了,创建套接字出错。问题是为什么出错,检查下参数,端口也没被占用啊。。。
    在这里插入图片描述
    然后叫来同事跟我一起断点调试。。。

    解决

    跟同事比对之后 发现是依赖版本的不对。。。下次借别人的工具类,一定要看清楚对应的依赖和版本。。。他用的是。。。

            <dependency>
                <groupId>commons-netgroupId>
                <artifactId>commons-netartifactId>
                <version>3.3version>
            dependency>
    
  • 相关阅读:
    神经网络算法用什么语言,神经网络是一种算法吗
    AUTOSAR规范与ECU软件开发(实践篇)9.6 AUTOSAR安全机制的程序流监控
    c++调用相机进行保存
    LeetCode每日一题(920. Number of Music Playlists)
    VIO/VINS中关于能观性/可观性的详细讲解
    NDK (ndk)报错 Unity requires NDK r19 (64-bit)(19.0.05232133)
    408数据结构,怎么练习算法大题?
    Mysql 内外链接,索引,事务,用户管理以及用C语言链接Mysql
    HTTP流量神器Goreplay核心源码详解
    MySQL详细案例 1:MySQL主从复制与读写分离
  • 原文地址:https://blog.csdn.net/qq_44717657/article/details/127125179