做个ftp上传jpg文件的小程序,需要通过Socks5代理上传。
开发环境 Delphi7+Indy9.00.10(FIdftp)
测试时发现,不通过代理上传正常,选择代理后 连接、登录、更改文件夹都正常,就是在执行上传的时候长时间(大概1分种)没有响应,然后就提示 Socket Error # 10060  Connection timed out. 找了两天也没找到原因。请各位朋友帮忙分析一下。谢谢!
部分代码如下:
ftp连接代码
    with FftpClient do
    begin
        Host  :=FTPParam.Host;
        Port  :=FTPParam.Port;
        Username:=FTPParam.UserName;
        Password:=FTPParam.PassWord;        Passive:=False;
        //使用 Socks 5 代理
         if FTPParam.PoxyUse then
        begin
            IOHandler:=IdIOHandlerSocket1;
            IdIOHandlerSocket1.SocksInfo:=IdSocksInfo1;
            IdSocksInfo1.Version:=svSocks5;
            IdSocksInfo1.Host :=FTPParam.PoxyHost;
            IdSocksInfo1.Port :=FTPParam.PoxyPort;
            if Trim(FTPParam.PoxyUserName)='' then
                IdSocksInfo1.Authentication:=saNoAuthentication
            else
            begin
                IdSocksInfo1.Authentication:=saUsernamePassword;
                IdSocksInfo1.Username:=FTPParam.PoxyUserName;
                IdSocksInfo1.Password:=FTPParam.PoxyPassWord;
            end;
        end
        else
          FftpClient.IOHandler:=Nil;
        try
            LogMessage('Connect to FTP Server '+FTPParam.Host+':'+IntToStr(FTPParam.Port));
            FftpClient.Connect(True);
        except
            LogMessage('Connect FTP Server Error.');
        end;   end;上传函数
function Tfrm_main.FtpUpLoad(AData:TpeccImage;FPicName:String):boolean;
var
fname:String;
iPostion:integer;
begin
    Result:=True;
    fname:=UpperCase(FPicName);
    if pos('.JPG',fname)>0 then
        Delete(fname,pos('.JPG',fname),4);    fname:=fname+AData.sort+'.JPG';    try
         iPostion:=FftpClient.Size(fname);
    finally
         if iPostion=-1 then
            iPostion:=0;
    end;
    if AData.sort='#3' then
        LogMessage('Begin UpLoad File '+FPicName+' part'+AData.sort)
    else
        LogMessage('Begin UpLoad File Part'+AData.sort);
    AData.stream.Position:=iPostion;
    try
        FftpClient.Noop;
        FftpClient.Put(AData.stream,fname);
        FftpClient.Noop;
    except
        on e:Exception do
        begin
            Result:=False;
            LogMessage(e.Message);
            logMessage('filename:='+fname);
        end;
    end;
    Application.ProcessMessages;
end;

解决方案 »

  1.   

    通过FlashFXP软件测试了,文件上传没问题。估计是软件的问题。请各位帮忙。谢谢!!
      

  2.   

    文件上传用的另外的连接通道,所以就必须修改Indy源码来支持
      

  3.   

    ly_liuyang 兄,你有这方面的资料吗?
      

  4.   

    yud,我也碰到类似情况,可能是网通和电信之间的网络问题http://topic.csdn.net/u/20080219/10/52ba0ce3-3e3f-43bf-8ea0-b62adcd1ac9f.html?seed=2083363157
      

  5.   

    设置Passive为True.fesnon888跟楼主碰到的应该不是同一问题.fesnon888碰到的,确实有可能是网络状况太差导致的.
      

  6.   

    要设为被动模式,idftp.passive = true