我们正在通过我们的应用程序进行FTP连接,这是一个JAVA应用程序。
我们在调用Socket.connect(Adreess,timeout)
方法之前使用FTPClient.connect()
方法设置了连接超时。
在同一连接下从FTP站点检索文件期间,我们没有设置任何超时。是否必须调用方法FTPClient.setSoTimeOut(timeout)
方法为同一连接下的每个此类交互设置单独的超时,或者Socket.connect(Adreess,timeout)
方法将在一个连接下为FTP站点的每次交互设置超时?
我也想知道这两种方法有什么区别?
答案 0 :(得分:2)
Socket.connect()
中的超时是连接超时,这是等待TCP握手完成的时间。此超时仅在每个连接发生一次。
setSoTimeout()
被称为套接字读取超时,即等待从套接字读取挂起字节的时间。这发生在整个TCP会话中读取的每个套接字上。
最好设置两个超时值,这样就不必依赖系统默认值,这可能会有所不同。但是,当调用卡在本机代码中时,超时有时可能无效。例如,如果防火墙静默丢弃数据包,则不遵守连接超时。