使用线程来保持FTP控制端口的活动

时间:2011-03-11 04:39:04

标签: python multithreading sockets ftp

我的FTP下载脚本(基于ftplib)挂在大量下载上。我正在使用的远程服务器,虽然高度可配置(proftpd)无法通过远程网络强加的防火墙限制。

我被限制在我的公司使用被动模式,即IT不会为我打开端口以允许FTP活动模式。

所以,我被困在被动模式中。

远程服务器在大型下载中断开10到15分钟。

我需要在大量下载期间保持控件连接的活动状态。我应该使用线程,每十秒发送一次'NOOP'命令吗?如果是这样的话,你会不会向我发送一些可以解决问题的示例代码?我需要将多个值传递给我的FTP下载功能。 keepalive函数不需要传递给它的任何参数。

或者,有没有办法控制我在端口21(控制连接)上使用的特定套接字,以便在端口nnnnnn上进行大量下载时保持活动状态?

非常感谢!

1 个答案:

答案 0 :(得分:6)

您也可以尝试使用TCP KeepAlive功能 添加此代码:

import socket
ftp.sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

TCP KeepAlive的支持是高度平台和防火墙相关的 - 因此无法保证,但它是为此目的而设计的,它比添加额外的线程要简单得多。你在哪个平台上工作?