请教:(socket)服务器端怎么把接收的流形成文件?谢谢!
客户端
procedure TForm1.Button1Click(Sender: TObject);
var
  mystream: TMemoryStream;
  filename:string;      //ini 文件路径
begin
      filename:=ExtractFilePath(paramstr(0))+'22.txt';
      mystream := TMemoryStream.Create;
      mystream.LoadFromFile(filename);
      mystream.position := 0; //加上这句看看
      ClientSocket1.Socket.SendStream(mystream);
      while(isjudge) do
           begin
                 mystream.free;
                 isjudge:=false;
           end;       
end;服务器端:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
    mystream:TMemoryStream;
begin
    //len:=Socket.ReceiveLength;
    //Socket.ReceiveBuf(mystream, Len);
end;我这里怎么接收客户端发来的流
我想把接收的流再形成文件
这样的程序是怎么写?
谢谢!

解决方案 »

  1.   

    var
      Stream: TWinSocketStream;
    begin
    Stream := TWinSocketStream.Create(Socket, 2000);
    Stream.WaitForData(3000);
    Stream.Read(nRead, n);
    Stream.SaveTofile('aaa');大概是这样
      

  2.   

    谢谢大哥:
    Stream := TWinSocketStream.Create(Socket, 2000);
    2000 是什么意思?Stream.WaitForData(3000);3000 是什么意思?Stream.Read(nRead, n);
    这句话是什么意思?
    Stream.SaveTofile('aaa');谢谢!
      

  3.   

    你创建一个文件流对象,
    然后把你的接收的流读进缓存区,
    然后用文件流对象一块一块把内存里的数据写到文件中例如:        aFileName := IdTCPClient1.ReadLn(#13#10, 100)  ; //读取传输过来的文件名        if aFileName = '' then  Exit;        //如果已经存在这个文件,先删掉
            if FileExists(ExtractFileDir(ParamStr(0)) + '\'+aFileName) then
            begin
            memo1.Lines.Add('本地目录存在'+aFileName+',删掉这个文件');
            DeleteFile(ExtractFileDir(ParamStr(0)) + '\'+aFileName);
            end;        //读取传输过来的文件名        IdTCPClient1.WriteLn;
            IdTCPClient1.ReadBuffer(aFileSize, 4); //读取文件大小
            ProgressBar1.Max := aFileSize;        //设置进度条的显示最大数字        //创建文件流
            ftmpStream:= TFileStream.Create(ExtractFileDir(ParamStr(0)) +'\'+aFileName, fmCreate);
            //用一个循环,不停读取数据流 然后利用文件流写入文件中
            repeat
              
              //确定本次循环读取的快数大小
              if aFileSize - ftmpStream.Size > SizeOf(Buff) then
                ReadCount := SizeOf(Buff)
              else
                ReadCount := aFileSize - ftmpStream.Size;          IdTCPClient1.ReadBuffer(Buff, ReadCount);  //将传来的数据流读入缓存区
              ftmpStream.WriteBuffer(Buff, ReadCount);  //将缓存区的数据写进文件中
              memo1.Lines.Add('写入文件 '+inttostr(ReadCount)+'字节。。');
              ProgressBar1.Position := ftmpStream.Size;  //改变进度条的状态
              Application.ProcessMessages;
            
          until ftmpStream.Size >= aFileSize;        memo1.Lines.Add('读取连接流中数据,写入创建的文件流对象ftmpStream中。。');        disconnect;
            memo1.Lines.Add('断开本次连接');