如何在网络上传输文件?
我知道可以利用Socket将文件分块实现,请问谁有具体资料??
能否用FTP呢,Delphi怎么实现呢?
另:CSDN的搜索功能简直没法用!!基本上请求发出去就没响应了。

解决方案 »

  1.   

    对呀就是那SOCKET呀,FTP要有个机器做服务器的,我有用SOCKET的代码,
    要的话发个邮件给我
      

  2.   

    http://www.cndelphi.com/bbs/dispbbs.asp?BoardID=49&id=285&replyID=285&star=2&skin=0
    上面线程和非线程的都有.需要代码给我发短消息.
      

  3.   

    procedure ex_download(remote_dir,remote_file:string);
    var
    localfname:string;
    begin
     datamodule2.NMFTP1.Connect;
     try  datamodule2.NMFTP1.ChangeDir(remote_dir);
       begin
        if nod='认证平台' then
          localfname:=remote_file
        else
          localfname:=mycaption;
          datamodule2.NMFTP1.Download(remote_file,FRootPath+remote_file);
       end
        except
        On E:Exception do begin
           showmessage('无法完成!原文件可能不存在!');
        end;
       end;
     datamodule2.NMFTP1.Disconnect;
    end;procedure ex_upload(remote_dir:string;atable:tcustomadodataset;fieldname:string);
    var
    remotefname,localfname:string;
    label lab;
    begin
     begin
     datamodule2.NMFTP1.Connect;
     try if not DirectoryExists('ftp://'+trim(sysshezhi.edtAddress.text)+'/'+remote_dir) then
        datamodule2.nmftp1.MakeDirectory(remote_dir);
        except
        On E:Exception do begin
        end;end;
        datamodule2.NMFTP1.ChangeDir(remote_dir);
    lab: if datamodule2.OpenDialog1.Execute then
           begin
            temp_dir:='ftp://'+trim(sysshezhi.edtAddress.Text)+'/'+remote_dir;
            localfname:=datamodule2.OpenDialog1.FileName;
            remotefname:=extractfilename(localfname);
            remotefnam:=remotefname;
            if remotefname='' then
             begin
              showmessage('没有选中文件!请重新选择!');
              goto lab;
             end
               else
                begin
                 if findfile(atable,remotefnam,fieldname) then
                   begin
                    if MessageDlg('此文件已存在,要覆盖吗?',mtConfirmation, [mbYes, mbNo], 0) = mrYes then
                      begin
                       bool:=true;
                       ins:=false;
                       datamodule2.NMFTP1.upload(localfname,remotefname);
                      end
                       else
                        begin
                         bool:=false;
                         messagebox(0,'请改名后重试!','提示!',0);
                       end;
                    end;
                 if not findfile(atable,remotefnam,fieldname) then
                   begin
                    bool:=true;ins:=true;
                    datamodule2.NMFTP1.upload(localfname,remotefname);
                   end;
                end;
            end;
     end;
        datamodule2.NMFTP1.Disconnect;
    end;
      

  4.   

    paste一个经典的给你:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ScktComp, StdCtrls;type
      TCon = record
        FileName : String;
        TotalSize : Integer;
        Status : Integer;
      end;  PCON = ^TCON;  TForm1 = class(TForm)
        SS: TServerSocket;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure SSClientConnect(Sender: TObject; Socket: TCustomWinSocket);
        procedure SSClientRead(Sender: TObject; Socket: TCustomWinSocket);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    begin
        SS.Port := 9000;
        SS.Active := True;
    end;procedure TForm1.SSClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    var c : pcon;
    begin    c :=new(pcon);
        c.FileName := '';
        c.TotalSize :=  0 ;
        c.Status := 0;
        Socket.Data := c;
        Socket.SendText('已经连接,请输入UPLOAD FILENAME SIZE'#13#10);end;procedure TForm1.SSClientRead(Sender: TObject; Socket: TCustomWinSocket);
    var C : PCON;
        cmd:String;
        Buffer : pointer;
        nRetr : integer;
        fs : TFileStream;
    const bufferSize =  1024 ;begin
        C:= Socket.Data ;
        case c.Status of
            0 :
            begin
                   cmd := trim(Socket.ReceiveText) ;               if  Pos('UPLOAD ',uppercase(cmd)) >  0 then
                   begin
                        c.FileName := trim(Copy(cmd,Pos(' ',cmd)+1,Length(cmd)));
                        c.TotalSize := StrToInt(Copy(c.FileName,Pos(' ',c.FileName)+1,Length(c.FileName)));
                        c.FileName := trim(Copy(c.FileName,1,Pos(' ',c.FileName)));
                        c.Status := 1;
                        Socket.Data := C;
                        Socket.SendText('you can send File  !'#13#10);
                   end;
                end;
            1 : begin
                    GetMem(Buffer,BufferSize);
                    nRetr := Socket.ReceiveBuf(Buffer^,BufferSize);                if not FIleExists('c:\'+c.FileName) then
                    begin
                         fs :=TFileStream.Create('c:\'+c.FileName,fmCreate or fmShareDenyNone);
                         fs.Seek(0,soFromBeginning);
                    end
                    else
                    begin
                         fs :=TFileStream.Create('c:\'+c.FileName,fmOpenWrite or fmShareDenyNone);
                         fs.Seek(0,soFromEnd);
                    end;                fs.WriteBuffer(Buffer^,nRetr);                fs.Destroy;
                    FreeMem(Buffer);
                end;
        end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
        Form2.Show;
    end;end. 
     --------------------------------------------------------------------------------
    来自:唐晓锋 时间:99-11-30 01:17:19 ID:162654 
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ScktComp;type
      TForm2 = class(TForm)
        CS: TClientSocket;
        OpenDialog1: TOpenDialog;
        Memo1: TMemo;
        Button1: TButton;
        Edit1: TEdit;
        Button2: TButton;
        SendCommand: TButton;
        Label1: TLabel;
        Button3: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure SendCommandClick(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure CSRead(Sender: TObject; Socket: TCustomWinSocket);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.DFM}
    function GetFileSize(const FileName: string):integer;
    var f : TFileStream;
    begin
        f := TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone);
        Result :=f.Size;
        F.Free;
    end;
    procedure TForm2.Button1Click(Sender: TObject);
    begin
        with OpenDialog1 do
        begin
            Execute;
            if FileName <> '' then
            begin
                Edit1.Text := 'UPLOAD '+ ExtractFileName(FileName) +' '+Inttostr(GetFileSize(FileName));
                Label1.Caption := FileName;
                cs.Socket.SendText(edit1.Text);
            end;
        end;
    end;procedure TForm2.Button2Click(Sender: TObject);
    begin
        CS.Active := True;end;procedure TForm2.SendCommandClick(Sender: TObject);
    var fs : TFileStream;
        Buf : pointer;begin
        //CS.Socket.SendText(Edit1.Text+#13#10);
        //Memo1.Lines.Add();
        fs := TFileStream.Create(Label1.Caption ,fmOpenRead or fmShareDenyNone);    GetMem(Buf,fs.Size);
        fs.Seek(0,soFromBeginning);    fs.ReadBuffer(Buf^,fs.Size);    memo1.Lines.Add('has send : '+inttostr(Cs.Socket.SendBuf(Buf^,fs.Size)));end;procedure TForm2.Button3Click(Sender: TObject);
    begin
        cs.Close;
    end;procedure TForm2.CSRead(Sender: TObject; Socket: TCustomWinSocket);
    begin   Memo1.Lines.add(socket.receiveText);end;end.
      

  5.   

    FTP是最好的解决方法http://lysoft.7u7.net
      

  6.   

    ftp需要服务器端操作系统开通ftp吗?
    我需要的是一个点到点的文件传输
    使用Socket需要把文件分成几个部分传输
    我听说Delphi6中有NMStrm和NMStrmServ可以实现
    可在Delphi7中这两个控件不见了
    被Indy代替了
    所以现在的问题是:
    Indy中有与NMStrm和NMStrmServ相对应的控件吗?多谢各位了
    分不够我可以再加
      

  7.   

    indy的idftp和idftpServer可以轻松实现,呵呵我就做过。
    现在谁还用nm系列哪。
    delphi都把它们给抛弃了。
    用Winsocket又有一定难度.
    所以...........
    在接收端做个ftp服务器接收,在客房端随便做个ftp上传就可以了。
      

  8.   

    “ftp需要服务器端操作系统开通ftp吗?”
    这是什么意思?呵呵....   我用indy做的ftp上传及接收,在最原始的win98下(什么都没装)都可以用。连服务器的概念都不存在!
      

  9.   

    你有相关的代码马
    能发到我信箱里吗
    [email protected]
    多谢
      

  10.   

    我发一个Sever端的源码给你.Client你就看一下indy的ftp_demo吧。都差不多的.
      

  11.   

    如果你没有indy的demo,就到下面地址找
    http://groups.yahoo.com/group/Indy-Demos/
      

  12.   

    c/s模式的,分别在client与server端写个发送与接收的线程,线程内容是通过三次握手的原理来实现.
      

  13.   

    用FTP解决了
    谢谢大家
    foxmx(夜之狐)请到
    http://expert.csdn.net/Expert/topic/2155/2155802.xml?temp=.9107324
    领分
    谢谢