var testream:tfilestream;
begin
testream:=tfilestream.Create(opendialog1.FileName,fmOpenRead);
testream.Position:=0;
clientsocket1.Socket.SendStream(testream); //发送文件
end;
我要接收应该怎么样写呢!!
请大家来帮帮我。

解决方案 »

  1.   

    //================================客户端=====================================
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ScktComp;type
      TForm1 = class(TForm)
        ClientSocket1: TClientSocket;
        OpenDialog1: TOpenDialog;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      s : TWinSocketStream;
      f, f2: TFileStream;
    begin
      if not OpenDialog1.Execute then Exit;
      ClientSocket1.Open;
      s := TWinSocketStream.Create(ClientSocket1.Socket, 60000);
      f := TFileStream.Create(OpenDialog1.FileName, fmShareDenyWrite);
      try
        s.CopyFrom(f, 0);
      finally
        s.Free;
        f.Free;
        ClientSocket1.Close;
      end;
    end;end.//========================================服务器端====================================
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ScktComp;type
      TForm1 = class(TForm)
        ServerSocket1: TServerSocket;
        procedure ServerSocket1GetThread(Sender: TObject;
          ClientSocket: TServerClientWinSocket;
          var SocketThread: TServerClientThread);
        private
        { Private declarations }
        public
        { Public declarations }
        end;
      TClientThread = Class(TServerClientThread)
        private
        public
        procedure ClientExecute; override;
        end;
        
    var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TClientThread.ClientExecute;
    var
      ReceiveBuffer : Array[0..1023] Of Char;
      SocketStream : TWinSocketStream;
      BytesRead : Integer;
      F : TFileStream;
      FileName: string;
    begin
     while not Terminated and ClientSocket.Connected do
      Begin
       try
         SocketStream := TWinSocketStream.Create(ClientSocket, 100);
         FileName := 'C:\afile';
         if FileExists(FileName) then FileName := FileName + '0';
         F := TFileStream.Create(FileName, fmCreate);
         try
           FillChar(ReceiveBuffer, sizeof(ReceiveBuffer), 0);
            while SocketStream.WaitForData(5000) do
            begin
              BytesRead := SocketStream.Read(ReceiveBuffer,SizeOf(ReceiveBuffer));
              if BytesRead = 0 then
                ClientSocket.Close
              Else
               F.WriteBuffer(ReceiveBuffer, BytesRead);
            end;
         finally
           SocketStream.Free;
           ClientSocket.Close;
           f.Free;
         end;
       except
       end;
      end;
    end;
    procedure TForm1.ServerSocket1GetThread(Sender: TObject;
      ClientSocket: TServerClientWinSocket;
      var SocketThread: TServerClientThread);
    begin
      SocketThread := TClientThread.Create(False, ClientSocket);
    end;end.
      

  2.   

    何不试试 Indy 系列的 idTCPClient 和 idTCPServer 很方便的。