我的FTP下载脚本(基于ftplib)挂在大量下载上。我正在使用的远程服务器,虽然高度可配置(proftpd)无法通过远程网络强加的防火墙限制。
我被限制在我的公司使用被动模式,即IT不会为我打开端口以允许FTP活动模式。
所以,我被困在被动模式中。
远程服务器在大型下载中断开10到15分钟。
我需要在大量下载期间保持控件连接的活动状态。我应该使用线程,每十秒发送一次'NOOP'命令吗?如果是这样的话,你会不会向我发送一些可以解决问题的示例代码?我需要将多个值传递给我的FTP下载功能。 keepalive函数不需要传递给它的任何参数。
或者,有没有办法控制我在端口21(控制连接)上使用的特定套接字,以便在端口nnnnnn上进行大量下载时保持活动状态?
非常感谢!
答案 0 :(得分:6)
您也可以尝试使用TCP KeepAlive功能 添加此代码:
import socket
ftp.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
TCP KeepAlive的支持是高度平台和防火墙相关的 - 因此无法保证,但它是为此目的而设计的,它比添加额外的线程要简单得多。你在哪个平台上工作?