小弟初学delphi,想用NMFTP控件在两台win98的机器上传送文件,可是我又不知道在哪里启动ftp服务,请各位指点。

解决方案 »

  1.   

    你可以使用第三方的FTP服务器软件,非常简单。
      

  2.   

    我想用delphi里面的nmftp控件写,不知怎么实现啊?
      

  3.   

    FTP必须要有一个Server端才可以,可以用第三方控件。
      

  4.   

    要编客户端和服务段程序
    部分代码:
    客户端:服务端:
    unit ftpUnit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, Buttons, StdCtrls, Menus, ExtCtrls, FtpSrv,WinSock,wsocket,
      FtpCli, FtpSrvC, VCLUnZip, VCLZip, DB, ADODB ;type
      TForm1 = class(TForm)
        FtpServer1: TFtpServer;
        Panel1: TPanel;
        Memo1: TMemo;
        SpeedButton1: TSpeedButton;
        SpeedButton2: TSpeedButton;
        SpeedButton3: TSpeedButton;
        SpeedButton4: TSpeedButton;
        SpeedButton5: TSpeedButton;
        SpeedButton6: TSpeedButton;
        StatusBar1: TStatusBar;
        SpeedButton7: TSpeedButton;
        myZip: TVCLZip;
        sjcsADOQuery1: TADOQuery;
        ADOConnection1: TADOConnection;
        sjcsADOQuery2: TADOQuery;
        sjcsADOStoredProc1: TADOStoredProc;
        SpeedButton8: TSpeedButton;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure SpeedButton1Click(Sender: TObject);
        procedure SpeedButton2Click(Sender: TObject);
        procedure SpeedButton3Click(Sender: TObject);
        procedure SpeedButton4Click(Sender: TObject);
        procedure SpeedButton5Click(Sender: TObject);
        procedure SpeedButton6Click(Sender: TObject);
        procedure UpdateClientCount;    
        procedure FtpServer1AlterDirectory(Sender: TObject;
         Client: TFtpCtrlSocket; var Directory: TFtpString;
         Detailed: Boolean);
        procedure FtpServer1AnswerToClient(Sender: TObject;
        Client: TFtpCtrlSocket; var Answer: TFtpString);
        procedure FtpServer1Authenticate(Sender: TObject;
          Client: TFtpCtrlSocket; UserName, Password: TFtpString;
          var Authenticated: Boolean);
        procedure FtpServer1BuildDirectory(Sender: TObject;
          Client: TFtpCtrlSocket; var Directory: TFtpString;
          Detailed: Boolean);
        procedure FtpServer1ChangeDirectory(Sender: TObject;
          Client: TFtpCtrlSocket; Directory: TFtpString; var Allowed: Boolean);
        procedure FtpServer1ClientCommand(Sender: TObject;
          Client: TFtpCtrlSocket; var Keyword, Params, Answer: TFtpString);
        procedure FtpServer1ClientConnect(Sender: TObject;
          Client: TFtpCtrlSocket; AError: Word);
        procedure FtpServer1ClientDisconnect(Sender: TObject;
          Client: TFtpCtrlSocket; AError: Word);
        procedure FtpServer1GetProcessing(Sender: TObject;
          Client: TFtpCtrlSocket; var DelayedSend: Boolean);
        procedure FtpServer1GetUniqueFileName(Sender: TObject;
          Client: TFtpCtrlSocket; var FileName: TFtpString);
        procedure FtpServer1MakeDirectory(Sender: TObject;
          Client: TFtpCtrlSocket; Directory: TFtpString; var Allowed: Boolean);
        procedure FtpServer1RetrDataSent(Sender: TObject;
          Client: TFtpCtrlSocket; Data: TWSocket; AError: Word);
        procedure FtpServer1RetrSessionClosed(Sender: TObject;
          Client: TFtpCtrlSocket; Data: TWSocket; AError: Word);
        procedure FtpServer1RetrSessionConnected(Sender: TObject;
          Client: TFtpCtrlSocket; Data: TWSocket; AError: Word);
        procedure FtpServer1Start(Sender: TObject);
        procedure FtpServer1Stop(Sender: TObject);
        procedure FtpServer1StorDataAvailable(Sender: TObject;
          Client: TFtpCtrlSocket; Data: TWSocket; Buf: PChar; Len: Integer;
          AError: Word);
        procedure FtpServer1StorSessionClosed(Sender: TObject;
          Client: TFtpCtrlSocket; Data: TWSocket; AError: Word);
        procedure FtpServer1StorSessionConnected(Sender: TObject;
          Client: TFtpCtrlSocket; Data: TWSocket; AError: Word);
        procedure FtpServer1ValidateDele(Sender: TObject;
          Client: TFtpCtrlSocket; var FilePath: TFtpString;
          var Allowed: Boolean);
        procedure FtpServer1ValidateGet(Sender: TObject;
          Client: TFtpCtrlSocket; var FilePath: TFtpString;
          var Allowed: Boolean);
        procedure FtpServer1ValidatePut(Sender: TObject;
          Client: TFtpCtrlSocket; var FilePath: TFtpString;
          var Allowed: Boolean);
        procedure FtpServer1ValidateRmd(Sender: TObject;
          Client: TFtpCtrlSocket; var FilePath: TFtpString;
          var Allowed: Boolean);
        procedure FtpServer1ValidateRnFr(Sender: TObject;
          Client: TFtpCtrlSocket; var FilePath: TFtpString;
          var Allowed: Boolean);
        procedure FtpServer1ValidateRnTo(Sender: TObject;
          Client: TFtpCtrlSocket; var FilePath: TFtpString;
          var Allowed: Boolean);
        procedure FtpServer1ValidateSize(Sender: TObject;
          Client: TFtpCtrlSocket; var FilePath: TFtpString;
          var Allowed: Boolean);
        procedure FormCreate(Sender: TObject);
        procedure sjjy;
        procedure sjdr;
        procedure SpeedButton7Click(Sender: TObject);
        function WinExecAndWait32(FileName:String; Visibility : integer): DWORD;
        procedure myZipBadCRC(Sender: TObject; CalcCRC, StoredCRC,
          FileIndex: Integer);
        procedure SpeedButton8Click(Sender: TObject);  private  i,filelen,rp_wj,cp_wj:integer;//rp_wj:表示收到加油站文件的指针,cp_wj:文件倒入到数据库的指针
      wj1,wj2,wj3,wj4,wj5,wj6,wj7,wj8,wj9,wj0:string;//文件件池,最多10个
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.UpdateClientCount;
    begin
        if FtpServer1.ClientCount = 0 then
          statusbar1.panels[0].text:='连接用户数:  '+ IntToStr(FtpServer1.ClientCount)
        else
           statusbar1.panels[0].text:='连接用户数:  '+IntToStr(FtpServer1.ClientCount) ;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
        try
            ftpserver1.Stop;
            ftpserver1.DisconnectAll;
        except
        end;
    end;procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin
       update;
       ftpserver1.Start;
       cp_wj:=0;
       rp_wj:=0;
    end;
      

  5.   

    procedure TForm1.SpeedButton2Click(Sender: TObject);
    begin
       ftpserver1.Stop;
       ftpserver1.DisconnectAll;
    end;procedure TForm1.SpeedButton3Click(Sender: TObject);
    var
        portnum:integer;
        tmpstr:string;
    begin
        tmpstr:=inputbox('FTP服务端口设置','请输入FTP服务端口号:','99');
        try
           portnum:=strtoint(tmpstr);
        except
           showmessage('请输入数字!');
           exit;
        end;
        speedbutton2click(sender);
        ftpserver1.port:=inttostr(portnum);
    //    ftpserver1.port:=inttostr(2048);
        speedbutton1click(sender);end;procedure TForm1.SpeedButton4Click(Sender: TObject);
    begin
       memo1.Clear;
    end;procedure TForm1.SpeedButton5Click(Sender: TObject);
    begin
       showmessage('FTP简易服务器');
       //,
        //          #13+'FTP简易服务器'+
        //          #13+'欢迎使用!',0);
    end;procedure TForm1.SpeedButton6Click(Sender: TObject);
    begin
    close;end;procedure TForm1.FtpServer1AlterDirectory(Sender: TObject;
      Client: TFtpCtrlSocket; var Directory: TFtpString; Detailed: Boolean);
    begin
         memo1.Lines.Add('# '+datetimetostr(now)+'  '+'FtpServer1AlterDirectory');
    end;procedure TForm1.FtpServer1AnswerToClient(Sender: TObject;
      Client: TFtpCtrlSocket; var Answer: TFtpString);
    begin
         memo1.Lines.Add('FtpServer1AnswerToClient');end;procedure TForm1.FtpServer1Authenticate(Sender: TObject;
      Client: TFtpCtrlSocket; UserName, Password: TFtpString;
      var Authenticated: Boolean);
    begin
      Memo1.Lines.Add('# '+datetimetostr(now)+'  '+ Client.GetPeerAddr +client.UserName+
                           ' User ''' + UserName + ''' is authenticated');
        if Password = 'bad' then
            Authenticated := FALSE;
    //     memo1.Lines.Add('FtpServer1Authenticate');end;procedure TForm1.FtpServer1ClientCommand(Sender: TObject;
      Client: TFtpCtrlSocket; var Keyword, Params, Answer: TFtpString);
    begin
        if keyword='PASS' THEN
        Memo1.Lines.Add('# '+datetimetostr(now)+'  '+ Client.GetPeerAddr +client.UserName+ ' ' +
                           Keyword + ' ' + '********')
        ELSE    Memo1.Lines.Add('# '+datetimetostr(now)+'  '+ Client.GetPeerAddr +client.UserName+ ' ' +
                           Keyword + ' ' + Params);
        if keyword='STOR' then
        wj1:=params;
      //   memo1.Lines.Add('FtpServer1ClientCommand');end;procedure TForm1.FtpServer1ClientConnect(Sender: TObject;
      Client: TFtpCtrlSocket; AError: Word);
    begin
       { The next test shows how to refuse a client }
        if Client.GetPeerAddr = '193.121.12.25' then begin
            Client.SendStr('421 Connection not allowed.' + #13#10);
            Client.Close;
            Exit;
        end;
        memo1.Lines.Add('# '+datetimetostr(now)+'  '+Client.GetPeerAddr+ client.UserName+'客户试图连接');
        UpdateClientCount;
    end;
      

  6.   

    装个Serv_U,可以把机器变为FTP服务器,就可以了(看看如何用Serv_U)
      

  7.   

    Serv_U是干什么的呀?我怎么没有听说过啊?
      

  8.   

    Serv-U著名的Win32 FTP服务器
    非常强大而且稳定