java ftp 连接超时时间_ftpClient的连接超时设置(setConnectTimeout,setSoTimeout) | 学步园...

从 ftpClient的官方网的FAQ里面看到,实现这个需要用一个 自定义的SocketFactory

然后实现里面的 createSocket方法,有好多个。

http://wiki.apache.org/jakarta-commons/Net/FrequentlyAskedQuestions

原文如下:

Q: How can I set a connection timeout?

A: setDefaultTimeout does not set the connect

timeout. It provides a default socket timeout. Only in J2SE 1.4 was the

ability to specify a timeout on connect added to the Socket API. Since

Commons Net 1.2.x has a J2SE 1.2 compatibility requirement, the ability

to specify a connect timeout is not included. The way to workaround

this is to implement your own SocketFactory and set it with SocketClient.setSocketFactory (FTPClient is a subclass of SocketClient). When you implement the SocketFactory,

add a setConnectTimeout method or some such. Inside of the createSocket

methods, use the J2SE 1.4 connect method with the timeout. We could

actually provide socket factory that subclasses DefaultSocketFactory

to do this without breaking backward compatibility, but that would have

to be discussed further. The way to do it is to compile it only if J2SE

>= 1.4 is being used. SocketClient could check for

availability of the J2SE 1.4 connect method and instantiate the J2SE

>= 1.4 factory if available (using Class.forName and newInstance).

The setDefaultTimeout method could then be changed to also set the

connect timeout in the new factory if being used. If users want this

functionality enough, the best chance of getting it implemented soon is

to submit a patch.

不过我看了 ftpClient 2.0的源代码。

ftpClient.connect(hostName, 21);

看看 connect的代码如下

public void connect(String hostname, int port)

throws SocketException, IOException

{

_socket_= _socketFactory_.createSocket();

_socket_.connect(new InetSocketAddress(hostname, port), connectTimeout);

_connectAction_();

}

其中有一个connectTimeout正是我们需要的连接超时,我们看看它的定义

/** The socket's connect timeout (0 = infinite timeout) */

private static final int DEFAULT_CONNECT_TIMEOUT = 0;

protected int connectTimeout = DEFAULT_CONNECT_TIMEOUT;

可见默认是不限超时的。再搜索一下,找到如下这个方法

/**

* Sets the connection timeout in milliseconds, which will be passed to the {@link Socket} object's

* connect() method.

* @param connectTimeout The connection timeout to use (in ms)

* @since 2.0

*/

public void setConnectTimeout(int connectTimeout) {

this.connectTimeout = connectTimeout;

}

/**

* Get the underlying socket connection timeout.

* @return

* @since 2.0

*/

public int getConnectTimeout() {

return connectTimeout;

}

可见,我们完全可以直接设置超时时间就行了。具体代码如下:

FTPClient ftpClient = new FTPClient();

ftpClient.setConnectTimeout(1000); // 一秒钟,如果超过就判定超时了

ftpClient.connect(hostName, 21);

估计2,0这个版本对这个问题进行了完善和增强,可以这么简单的实现了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java break和return的区别_【java】break,continue和return区别

break&#xff1a;适用于switch和loopcontinue:只适用于loop两者都可以通过给循环加标签来控制跳出&#xff0c;如下例所示class BreakDemo{public static void main(String[] args){w:for (int i0; i<4; i) ##外for循环加标签{q:for(int m0;m<10;m)##内for循环加标签{Sy…

面试 java反射机制实现原理_面试官你要这么问我Java反射原理,我就笑了

引读&#xff1a;上周我投递出了简历&#xff0c;岗位是java后端开发工程师。这周美团面试官给我进行了面试&#xff0c;面试过程中他问了Java的反射原理。(不得不夸一句&#xff0c;美团的效率真高&#xff0c;上午面完一面&#xff0c;晚上二面马上安排上了。)无论什么Java技…

java 二叉堆_【数据结构】二叉堆:Java实现最大堆及堆排序

堆在逻辑上一棵完全二叉树&#xff0c;所以可以通过数组进行数据存储&#xff0c;而其余的树大多采用链式结构进行数据存储堆分类&#xff1a;大顶堆&#xff1a;大顶堆就是无论在任何一棵(子)树中&#xff0c;父节点都是最大的小顶堆&#xff1a;小顶堆就是无论在任何一棵(子)…

java int stack_java Stack的使用

堆栈是一种 “后进先出” (LIFO) 的数据结构&#xff0c; 只能在一端进行插入(称为 “压栈” ) 或删除 (称为“出栈”)数据的操作。所以很适合逆序操作&#xff0c;JAVA 中&#xff0c;使用 java.util.Stack 类的构造方法创建对象。Stack的基本方法1. public push (item )把项…

java 数据结构 迷宫_JAVA数据结构与算法之递归(一)~ 迷宫问题

递归递归需要遵守的重要规则1) 执行一个方法时&#xff0c;就创建一个新的受保护的独立空间(栈空间)2) 方法的局部变量是独立的&#xff0c;不会相互影响, 比如 n 变量3) 如果方法中使用的是引用类型变量(比如数组)&#xff0c;就会共享该引用类型的数据.4) 递归 必须向退出递归…

java web 自定义异常_Java web, service 层应该通过异常(自定义Exception)来中断业务吗?...

同意&#xff01;但是不是最佳实践还有待商榷&#xff0c;我这里给出自己一直使用的用异常控制流程的方案&#xff0c;分享讨论一下吧。由于JAVA只能有一个返回值&#xff0c;但有时候一个service方法除了返回结果外还真的需要有一些附加信息&#xff0c;比如用户非法操作时要中…

java 数据字典 spring_springboot+redis+切面实现数据字典功能

自定义注解&#xff1a;DataDict&#xff0c;用于bo对象类&#xff0c;需要翻译的属性package com.zddts.common.annotation.dict;import java.lang.annotation.*;/*** 说明&#xff1a;数据字典处理类* Created by luojie on 2019/05/29.*///DataDict( dict"patType"…

java支持多线程吗_Java多线程之一

进程与线程进程进程是进程实体的运行过程&#xff0c;是系统进行资源分配和调度的一个独立单位&#xff0c;比如我们windows电脑上运行的一个程序就是一个进程。在传统进程中进程是资源分配和调度的一个基本单位&#xff0c;在后来引入线程概念后&#xff0c;进程就变成了资源分…

java继承与多态性_Java继承与多态浅析

一、继承1、通过extends继承的父类可以是不加abstract关键字的普通类&#xff0c;也可以是加了abstract关键字的抽象类。继承普通类时可以覆写父类的方法&#xff0c;或者创建自己独有的方法&#xff0c;或者这两 者都不使用。继承抽象类时&#xff0c;必须覆写抽象类中的…

java队列加锁_java并发-----浅析ReentrantLock加锁,解锁过程,公平锁非公平锁,AQS入门,CLH同步队列...

前言为什么需要去了解AQS&#xff0c;AQS&#xff0c;AbstractQueuedSynchronizer&#xff0c;即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等)&#xff0c;JUC并发包的作者(Doug Lea)期望它能够成为实现大部分同步…

java resttemplate_java-通过resttemplate通过Spring Rest服务发送文...

标题可能看起来很普通,但是没有一个适合我的问题.我有一个REST服务,它接受多部分形式的常规参数和文件.我想使用resttemplate将数据和文件发送到上述rest服务.直到我发送正常的字符串数据为止,没有任何问题.一旦我添加了发送字节的代码,那么我开始收到400错误的请求错误.如果我…

java中string的方法_java中String的常用方法

package com.string;public class string1 {public static void main(String args[]){//将char[]数组转换成Stringchar[] ch{h,我,是,中,国,人};String strnew String(ch);System.out.println(str); //结果为str"我是中国人"//将字符串转换为char数组,方法一使用getC…

Java是否为回文_java语言判断一个数字是否为回文数字

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为…

java floyd_百度百科里面的floyd算法java的代码,总是无法运行。请问是代码有问题吗,如何编译啊?...

展开全部不能编译运行的说法是错误&#xff0c;但是结果是否正确&#xff0c;我就32313133353236313431303231363533e59b9ee7ad9431333335303539不知道了&#xff0c;我不懂这个算法public class FLOYD {int[][] length null;// 任意两点之间路径长度int[][][] path null;// …

cache数据库和mysql_并发环境下,先操作数据库还是先操作缓存?

原标题&#xff1a;并发环境下&#xff0c;先操作数据库还是先操作缓存&#xff1f;来源&#xff1a;捡田螺的小男孩前言在分布式系统中&#xff0c;缓存和数据库同时存在时&#xff0c;如果有写操作&#xff0c;先操作数据库还是先操作缓存呢&#xff1f;本文将分5种方案 展开…

contab 手动可以 java_crontab 定时执行脚本出错,但手动执行脚本正常

原因&#xff1a; crontab 没有去读环境变量&#xff0c;需要再脚本中手动引入环境变量&#xff0c;可以用source 也可以用export 写死环境变量。为了定时监控Linux系统CPU、内存、负载的使用情况&#xff0c;写了个Shell脚本&#xff0c;当达到一定值得时候&#xff0c;发送邮…

java的mybatis批量更新_mybatis批量更新的问题

一、问题描述场景描述&#xff1a;有这样一个service方法&#xff0c;调用了两个dao中的方法。第一个方法按照传入的id批量更新用户名。第二个dao方法无数据库操作&#xff0c;仅仅抛出一个RuntimeException.这个service方法通过xml配置由spring事务管理的。两个DAO类中分别有S…

java 查看垃圾收集器_JVM系列:查看JVM使用的什么垃圾收集器

一、方法一打印虚拟机所有参数[rootlocalhost ~]# java -XX:PrintFlagsFinal -version | grep :uintx InitialHeapSize : 258689024 {product}uintx MaxHeapSize : 4139778048 {product}bool PrintFlagsFinal : true {product}bool UseCompressedOops : true {lp64_product}boo…

java在W n8安装_在windows中安装JDK8并配置环境变量-java环境变量设置

学习JAVA&#xff0c;必须得安装一下JDK(Java development kit java开发工具包)&#xff0c;配置一下环境就可以学习JAVA了&#xff0c;下面是下载和安装JDK的教程&#xff1a;一、去oracle官网上下载jdk8的下载地址&#xff1a;https://www.oracle.com/technetwork/java/javas…

lisp java_从Java调用的LISP代码

长篇小说:我正在为我的函数编程类做一个项目,我想到在Lisp中为Mario AI competition.我正在研究从Java调用LISP代码的框架/库/方式,甚至更好的LISP Java互通信。我看过Jacol但它是旧的,对我来说也不是很好。到目前为止,我的最佳选择是:Jatha.它真的很整洁,虽然一些Lisp构造还没…