java - Socket.connect(Areess,timeout) 和 FTPClient.setSoTimeOu 之间的区别

标签 java ftp apache-commons

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

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

我也想知道这两种方法有什么区别?

最佳答案

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

setSoTimeout()称为套接字读取超时,即等待从套接字读取挂起字节的时间。这发生在整个 TCP session 中读取的每个套接字上。

最好设置两个超时值,这样您就不必依赖系统默认值,因为系统默认值可能会有所不同。但是,当调用卡在 native 代码中时,超时有时可能不起作用。例如,如果防火墙默默地丢弃数据包,则不会遵守连接超时。

关于java - Socket.connect(Areess,timeout) 和 FTPClient.setSoTimeOu 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1409829/

相关文章:

java - 如何在 Cognos - SDK 中创建包?

coldfusion - 使用 cfftp 从 ftp 获取文件(coldfusion)

ios - 上传录音到ftp

java - Java中的链表有快速的concat方法吗?

java - 使用 commons-net 重试上传到 FTP 的正确方法是什么?

java - 在 ArrayList 或 Map 中添加树/图的 n 个节点的空间复杂度

java - 实时过滤输入?

java - 从 PHP 到 Android 的 Bool HTTP 响应

c# - 使用 EPPlus 库使用 C# 直接在 FTP 上创建 Excel 文件

android - 在 Android 中使用 Apache Commons lib 时的奇怪行为