Java Socket.connect(地址、超时)和FTPClient.setSoTimeOu之间的差异

Java Socket.connect(地址、超时)和FTPClient.setSoTimeOu之间的差异,java,ftp,apache-commons,Java,Ftp,Apache Commons,我们正在通过JAVA应用程序进行FTP连接。 在调用FTPClient.connect()方法之前,我们使用Socket.connect(地址,超时)方法设置了连接超时 在同一连接下从FTP站点检索文件期间,我们没有设置任何超时。是否必须调用方法FTPClient.setSoTimeOut(超时)method为同一连接下的每个此类交互设置单独的超时,或者调用方法Socket.connect(address,timeout)方法将为一个连接下的每个与FTP站点的交互设置超时 我还想知道这两种方法之

我们正在通过JAVA应用程序进行FTP连接。 在调用
FTPClient.connect()
方法之前,我们使用
Socket.connect(地址,超时)
方法设置了连接超时

在同一连接下从FTP站点检索文件期间,我们没有设置任何超时。是否必须调用方法
FTPClient.setSoTimeOut(超时)
method为同一连接下的每个此类交互设置单独的超时,或者调用方法
Socket.connect(address,timeout)
方法将为一个连接下的每个与FTP站点的交互设置超时


我还想知道这两种方法之间的区别是什么?

Socket.connect()中的超时是连接超时,即等待TCP握手完成的时间。此超时仅在每个连接中发生一次

setSoTimeout()
称为套接字读取超时,即从套接字读取挂起字节的等待时间。在整个TCP会话中,每次读取套接字时都会发生这种情况


设置这两个超时值是一种很好的做法,这样您就不会依赖于系统默认值,因为系统默认值可能会有所不同。但是,当调用在本机代码中卡住时,超时有时可能不起作用。例如,如果防火墙以静默方式丢弃数据包,则不会遵守连接超时。

我想这是来自Apache Commons Net的FTPClient?