Indy10中如何用IdTCPServer传送文件?哪位大侠帮帮忙,谢了!

解决方案 »

  1.   

    这里有个例子,你去Down下看看。
    http://www.2ccc.com/article.asp?articleid=1681给你一段传输文件的代码,调试过,传输文件没问题。用Stream,文件很大的时候,传输会有问题。   
        
      服务端:   
      var   
              iFileHandle:integer;   
              iFileLen,cnt:integer;   
              buf:array[0..4096]   of   byte;   
      begin   
              iFileHandle:=FileOpen('E:\setup\qq2004sp1.exe',fmOpenRead);   
              iFileLen:=FileSeek(iFileHandle,0,2);   
              FileSeek(iFileHandle,0,0);   
              AThread.Connection.WriteInteger(iFileLen);   
              while   true   do   
              begin   
                      cnt:=FileRead(iFileHandle,buf,4096);   
                      AThread.Connection.WriteBuffer(buf,cnt);   
                      if   cnt<4096   then   
                              break;   
              end;   
              FileClose(iFileHandle);   
      end;   
        
      客户端:   
      procedure   TForm1.Button1Click(Sender:   TObject);   
      var   
              rbyte:array[0..4096]   of   byte;   
              sFile:TFileStream;   
              iFileSize:integer;   
      begin   
              try   
                      IdTcpClient1.Connect(5000);   
              except   
                      exit;   
              end;   
        
              iFileSize:=IdTCPClient1.ReadInteger;   
        
              sFile:=TFileStream.Create('e:\bb.tmp',fmCreate);   
              While   iFileSize>4096   do   
              begin   
                      IdTCPClient1.ReadBuffer(rbyte,4096);   
                      sFile.Write(rByte,4096);   
                      inc(iFileSize,-4096);   
              end;   
              IdTCPClient1.ReadBuffer(rbyte,iFileSize);   
              sFile.Write(rByte,iFileSize);   
              sFile.Free;   
              ShowMessage('file   get   ok!');   
      end;
      

  2.   


    先在发送端和接收端定义同一个结构
      TFileBlock = record   
                     FileName:string;
                     Size:integer;
                     Buf:array[0..4096] of byte; 
                   end;
    用TFileStream打开文件 
    循环读出4096字节放到桔构里再发送
    直到应发送字节等0