Delphi没高手了吗?(300)

  • 主题发起人 主题发起人 chinazxy2008
  • 开始时间 开始时间
C

chinazxy2008

Unregistered / Unconfirmed
GUEST, unregistred user!
TIdFTP.put 上传文件外网超时失败,内网正常,路由器的访火墙没有开,请问怎么解决,CuteFTP外网都可以上传,FTP服务器是IIS,操作系统是2003
 
目标文件夹或磁盘是否有权限控制?比如你想把A.txt上传到C:/sou文件夹里,但这个文件夹你没有权限写,就会出错,还有你上送的东西多大?自己先想想,不要动不动就说没高手了
 
1、谢谢楼上的捧场2、上传的文件只有几十K3、文件夹的权限是正常的,因为内网的机器都可以上传问题是现在外网不能上传
 
你跟踪一下代码,看看是否可以连接到Ftp服务器(最好不要匿名登录,用用户名和密码验证通过后登录),如果连Ftp服务器都不能连接上那就不是代码的问题了,要查网络的原因,如果可以连上并正确地定位到你的目标文件夹那就应该没有什么问题的,你可以自行测试一下:Get一个文件是否可以?再Put一个文本文件看看,还有,文件类型没有什么限制吧?有些Ftp服务器可能会有限制。
 
1、FTP下载正常,说明连接没问题2、目录浏览也是正常的,就上传不能(只是外网不能,内网可以),但CuteFTP外网都可以上传
 
没有限制啊,因为CuteFTP外网都可以上传呢
 
可能是网关的问题
 
最好抓包调试,和CuteFTP的封包对比
 
你QQ多少,帮我看看原因,谢谢,我QQ是376245075
 
谢能帮我看看原因嘛内网正常,就外网不行
 
FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接。FTP服务程序一般会支持两种不同的模式,一种是Port模式,一种是Passive模式(Pasv Mode),我先说说这两种不同模式连接方式的分别。先假设客户端为C,服务端为S.Port模式:当客户端C向服务端S连接后,使用的是Port模式,那么客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口N在等着你进行数据连接),当服务端S收到这个Port命令后 就会向客户端打开的那个端口N进行连接,这种数据连接就生成了。Pasv模式:当客户端C向服务端S连接后,服务端S会发信息给客户端C,这个信息是(服务端S在本地打开了一个端口M,你现在去连接我吧),当客户端C收到这个信息后,就可以向服务端S的M端口进行连接,连接成功后,数据连接也建立了。从上面的解释中,大家可以看到两种模式主要的不同是数据连接建立的不同,对于Port模式,是客户端C在本地打开一个端口等服务端S去连接建立数据连接;而Pasv模式就是服务端S打开一个端口等待客户端C去建立一个数据连接。 FTP需要2个端口,一个端口是作为控制连接端口,也就是21这个端口,用于发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口,端口号为20(仅PORT模式),是用来建立数据传输通道的,主要有3个作用从客户向服务器发送一个文件。 从服务器向客户发送一个文件。 从服务器向客户发送文件或目录列表。
 
你抓包看一下CuteFTP的链接过程,看是采用哪种模式和自己的对比下
 
试试下面的方法:uses WinInetprocedure FtpPutTest; // Ftpvar hNet, hFTP: Pointer;begin inherited; hNet := InternetOpen('Test.exe', 1, nil, nil, 0); if hNet = nil then Exit; hFTP := InternetConnect(hNet, '127.0.0.1', 21, 'name', 'pass', 1, 0, 0); if hFTP = nil then begin InternetCloseHandle(hNet); Exit; end; if not FtpSetCurrentDirectory(hFTP, '/blacklist') then begin InternetCloseHandle(hFTP); InternetCloseHandle(hNet); Exit; end; try if FtpPutFile(hFTP, 'C:/test.txt', 'test.txt', 1, 255) then ShowMessage('Ftp上送成功。'); finally InternetCloseHandle(hFTP); InternetCloseHandle(hNet); end;end;祝你好运。
 
NOTE:> [2010-03-08 17:53:46] New transfer created for /"D:/MyVssSoft/DelphiSoft/ydzhbsoft/YdBuildClient/RegInfoii.ini/" <31>STATUS:> [2010-03-08 17:53:48] Transferring file "/RegInfoii.ini"...COMMAND:> [2010-03-08 17:53:48] SIZE RegInfoii.ini [2010-03-08 17:53:48] 550 RegInfoii.ini: The system cannot find the file specified. STATUS:> [2010-03-08 17:53:48] Requested action not taken (e.g., file or directory not found, no access).COMMAND:> [2010-03-08 17:53:48] CWD /RegInfoii.ini [2010-03-08 17:53:48] 550 /RegInfoii.ini: The system cannot find the file specified. STATUS:> [2010-03-08 17:53:48] Requested action not taken (e.g., file or directory not found, no access).COMMAND:> [2010-03-08 17:53:48] CWD / [2010-03-08 17:53:48] 250 CWD command successful.STATUS:> [2010-03-08 17:53:48] PWD skipped. Current folder: "/".COMMAND:> [2010-03-08 17:53:48] PASV [2010-03-08 17:53:48] 227 Entering Passive Mode (125,71,205,93,156,169)COMMAND:> [2010-03-08 17:53:48] STOR RegInfoii.iniSTATUS:> [2010-03-08 17:53:48] Connecting FTP data socket... 125.71.205.93:40105... [2010-03-08 17:53:48] 125 Data connection already open; Transfer starting. [2010-03-08 17:53:48] 226 Transfer complete.STATUS:> [2010-03-08 17:53:48] File transfer complete.STATUS:> [2010-03-08 17:53:49] Getting listing "/"...COMMAND:> [2010-03-08 17:53:49] PASV [2010-03-08 17:53:49] 227 Entering Passive Mode (125,71,205,93,156,170)COMMAND:> [2010-03-08 17:53:49] LISTSTATUS:> [2010-03-08 17:53:49] Connecting FTP data socket... 125.71.205.93:40106... [2010-03-08 17:53:49] 125 Data connection already open; Transfer starting. [2010-03-08 17:53:49] 226 Transfer complete.STATUS:> [2010-03-08 17:53:49] Directory listing completed.
 
上面是CuteFTP的上传信息
 
有人能帮帮我吗
 
szhcracker我试了你的代码,在内网可以上传,在外网就是不行,
 
哪步出问题了?你的Ftp服务器的外网地址或者你代码里的IP地址没问题吧?试试外网下载是否可以?还可以用IE测试一下,实在不行,你把Ftp的地址发出来,你设定一个临时的用户及密码并开一个临时文件夹,我看看能否连上来及上送,我总觉得可能是网络或Ftp服务器设置的问题,不要老想着CuteFTP怎么可以(那可能是团队开发的结晶),解决自己的问题才是正理,否则你就用CuteFTP好了,不必自己写代码。
 
IP:125.71.205.93用户名和密码都是:testftp谢谢
 
后退
顶部