当前位置: 首页 > 知识库问答 >
问题:

获取连接失败:ftp连接中的ETIMEDOUT(连接超时)

呼延沈义
2023-03-14

我一直在使用ftp在android应用程序的服务器上上传图像,我正在使用以下代码连接ftp。它在Wi-fi中工作正常,但如果我切换到3G或2G连接,就会出现连接超时错误。那么,你能告诉我如何处理这种情况吗。我的客户在Veriozon也面临这个问题,Sprint,ATT网络提供商。它的iPhone版本在所有网络中都运行良好。

代码:

try {
                    ftpClient = new FTPClient();
                    ftpClient.setConnectTimeout(30);
                    ftpClient.connect(InetAddress.getByName(server));

                    boolean isLogin = ftpClient.login(username, password);
                    boolean workingDir = ftpClient
                            .changeWorkingDirectory(path);

                    if (ftpClient.getReplyString().contains("250")) {

                        ftpClient
                                .setFileType(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);

                        buffIn = new BufferedInputStream(
                                new FileInputStream(filePath));
                        ftpClient.enterLocalActiveMode();
                        // ftpClient.enterLocalPassiveMode();

                        ProgressInputStream progressInput = new ProgressInputStream(
                                buffIn, progressHandler);

                        isUploaded = ftpClient.storeFile(fileName,
                                progressInput);

                        buffIn.close();
                        ftpClient.logout();
                        ftpClient.disconnect();
                    }

                } catch (Exception e) {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            runOnUiThread(new Runnable() {

                                @Override
                                public void run() {
                                    progressDialog.dismiss();
                                    Toast.makeText(RegisterActivity.this,
                                            R.string.postimage_uploaderror,
                                            Toast.LENGTH_LONG).show();
                                }
                            });

                        }
                    });
                }

错误:

JAVA网ConnectException:无法连接到主机(端口21):连接失败:ETIMEDOUT(连接超时)

我在项目中导入了“commons-net-ftp-2.0.jar”和commons-net-3.3.jar。

期待你的回答。

顺致敬意,

德旺

共有1个答案

充星腾
2023-03-14

通常情况下,3G或2G连接比wifi慢,这就是为什么你会出现连接超时错误。要遇到这种情况,你需要为你的FTP客户端设置超时延迟,你可以通过添加这一行来做到这一点

ftpClient.setConnectTimeout(30); // 30 mSeconds increase it for more time 

因此,您的代码将成为:

ftpClient.setConnectTimeout(30);
ftpClient.connect(InetAddress.getByName(server));
boolean isLogin = ftpClient.login(username, password);
boolean workingDir = ftpClient.changeWorkingDirectory(path);

编辑

将超时时间增加到50秒(50000)

ftpClient.setConnectTimeout(50000); // 50 Seconds increase it for more time 
 类似资料:
  • 代码片段如下所示: 如果有人有决议,请帮忙?

  • 我已经做了所有的尝试,但都不起作用,这是我的问题,我试图将一些文件从一台机器发送到另一台机器,想法是在目标机器上创建一个servlet,在服务器上运行它,并等待任何客户机连接,客户机和servlet代码在lan网络类型中完美地工作,但当涉及到wan网络类型时,我得到了这个例外 线程“main”org.apache.http.conn.HTTPhostConnectException:连接到192.

  • 我得到以下exeption连接到Mssql服务器。 我在属性中使用相同的配置连接到JDBC,但在尝试连接到R2DBC时出现问题。在Rest时发生,而不是在启动应用程序时发生。

  • 问题内容: 在Windows上连接Jenkins从属代理失败,连接超时。 环境:Windows Server 2003 R2 Java6 掌握:Linux从属:Windows 我尝试将其同时运行为jnlp和java -jar cmd,但始终失败。 问题答案: 您没有提供太多信息,但是从错误消息中,您似乎暗示您的构建计算机正在Amazon EC2上运行。 在这种情况下,您的EC2实例安全组可能不允许

  • 错误:无法启动连接:错误:WebSocket无法连接。在服务器上找不到连接,endpoint可能不是信号器endpoint,服务器上不存在连接ID,或者存在阻止WebSocket的代理。如果有多台服务器,请检查是否启用了粘性会话。 WebSocketTransport.js:49WebSocket连接到“ws://xxxxxx/生产/网络服务/集线器/spreadhub”失败: Angular.t