谁能教我写 FTP 程序(100分)

  • 主题发起人 主题发起人 microwave
  • 开始时间 开始时间
M

microwave

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个 FTP 程序,请问谁有这方面的文章?
FTP 上下传文件是不是一定要用控件?
 
有阿不过是E文的
 
如果你不写控制台程序就用控件吧很简单的

(一)用nmstrm,nmstrmserv

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Psock, NMSTRM;

type
TForm1 = class(TForm)
NMStrm1: TNMStrm;
NMStrmServ1: TNMStrmServ;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
MyStream: TMemoryStream;
begin
MyStream:= TMemoryStream.Create;
try
NMStrm1.Host:='127.0.0.1';
MyStream.LoadFromFile('c:/test.exe');
NMStrm1.FromName:='c:/test1.exe'; //发送一个文件名
NMStrm1.PostIt(MyStream);
finally
MyStream.Free;
end;
end;

procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
MyStream: TMemoryStream;
begin
MyStream := TMemoryStream.Create;
MyStream.LoadFromStream(strm);
MyStream.SaveToFile(sFrom);
end;

end.

而且Delphi有自带的一个例子,在Delphi/demo/fastnet/strm目录里就是实现的文件传输。

-----------------------------------------------------------------------
(二)用nmftp

给个通俗的:(ftp客户方用fastnet下的nmftp控件)
nmftp1.Host:=xxx.xxx.xxx.xxx;
nmftp1.port:=21;
nmftp1.Connect;
nmftp1.userid:=xxx;
nmftp1.password:=xxx;
nmftp1.reportlevel:=1;
nmftp1.timeout:=xxxx;
nmftp1.Download(ftp服务器上的文件,存为本地哪个文件); (下载)
nmftp1.Abort;(暂停下载)
nmftp1.Downloadrestore(ftp服务器上的文件,存为本地哪个文件);(下载的断点续传)
nmftp1.upload(xxxxx,xxxxx); (上传)
nmftp1.upload(xxx.xxxx); (上传的断点续传)
如果你想自己做一个ftp服务器,delphi没有自带的控件
可以用ics控件组上的ftpserver控件
 
当然不用控件也可以啊,不过需要你熟悉winsocket 进行套接字编程。

下面我说一说方法
首先加载winsock
用wsastartup函数,
然后用socket建立一个套接字,
与远程的ftp服务器建立一个连接
发送用户名以及密码,一般可以匿名登陆,
然后找到需要下载哪个软件,具体得位置,
然后就是get了

全部都是发送数据到缓冲区,和接受缓冲区里的数据,
你可以看一看winsock.pas里面得声明,其实所有得控件都是利用这个来编写得,只不过对
应得端口不同,以及协议不同罢了。
其次可以看一看flashget下载时,现实得一些连接数据,你会又收获得,
最后,你用telnet 到一个服务器试一试,端口用21呵呵,会又收获的。
 
用ICS吧,不是很复杂,但是很有效率,我刚刚作的一个FPT客户端用的就是ICS
 
在Delphi不是有个范例吗?
自己研究一下就行了
 
调用 wininet.pas Unit
关于文章 ,你到搜索引擎找一下 Delphi与Internet 关键字 或 就直接找 wininet delphi
 
可以用DELPHI自己带的nmftp,有例子。但实在不怎么好,而且有BUG。
也可以用WININET,但在INTERNET上有些慢:(没有用nmftp的快。(也许是我的程序的
问题!呵呵)
最后推荐用ICS,很不错!
全都是废话!:)
 
调用 wininet.pas 中的各个函数即可。
如:

HINTERNET InternetConnect(
IN HINTERNET hInternet,
IN LPCTSTR lpszServerName,
IN INTERNET_PORT nServerPort,
IN LPCTSTR lpszUserName,
IN LPCTSTR lpszPassword,
IN DWORD dwService,
IN DWORD dwFlags,
IN DWORD_PTR dwContext
);

HINTERNET InternetOpen(
IN LPCTSTR lpszAgent,
IN DWORD dwAccessType,
IN LPCTSTR lpszProxyName,
IN LPCTSTR lpszProxyBypass,
IN DWORD dwFlags
);

BOOL FtpSetCurrentDirectory(
IN HINTERNET hConnect,
IN LPCTSTR lpszDirectory
);

BOOL FtpGetFile(
IN HINTERNET hConnect,
IN LPCTSTR lpszRemoteFile,
IN LPCTSTR lpszNewFile,
IN BOOL fFailIfExists,
IN DWORD dwFlagsAndAttributes,
IN DWORD dwFlags,
IN DWORD_PTR dwContext
);

 
推荐用INDY控件。
 
誰有INDY及ICS控件啊!
damill@yeah.net
多謝了!!
 
www.inprises.com
 
使用WinInet吧!我认为写Http、Ftp之类的程序用WinInet最合适,使用控件要么对多线程不支持,要么协议某些方面定义的又不好使,
不过实在想用控件的话,WinShoes倒不错
 
我用的是IdFTP的控件,D6的!

很方便!
 
delphi的NMFTP确实有问题,特别是LIST,有致命的BUG.

后又改用ICS和MFTP,在局域网内一切正常.
可我使用GPRS手机拨号上网(移动专用服务器),却不能上传文件(提示:"550 localfilename: Access is denied or not found.").
其他一切正常.
不知此为何故?
 
组内统一用D5
D6的程序不兼容的
 
to jrp
我想要idftp可以吗?zzd01@263.net
thanks
 
cooldeer:你自己到http://www.nevrona.com/Indy/自己去download吧!
 
maafei:
你知道该怎么解决我的问题吗?
事实上,调试时控件内部代码会有DataFile := TFileStream.Create(FFile, fmOpenRead);
语句出错(局欲网内正常,只是在用手机拨号上网时,这句提示出错)
 
后退
顶部