Показать сообщение отдельно
  #2  
Старый 20.08.2012, 09:04
xNeKiToSx xNeKiToSx вне форума
Прохожий
 
Регистрация: 23.01.2012
Сообщения: 10
Репутация: 10
По умолчанию

Севрер (отдает файлы по запросу)
Код:
  begin
   FName:=copy(TSockData(Sock.Data)^.Rec,1,TSockData(Sock.Data)^.LenRec-1);
   Delete(TSockData(Sock.Data)^.Rec,1 ,TSockData(Sock.Data)^.LenRec);
   TSockData(Sock.Data)^.LenRec:=0;
   FGive:=true;
   FStream:=TMemoryStream.Create;
   FStream.LoadFromFile(FName);
   FStream.Position:=0;
   p:=FStream.Memory;
   Form1.Memo1.Lines.Add('Отдаю '+FName);
   m:=FName+'#'+IntToStr(FStream.Size)+'#';
   Form1.Memo1.Lines.Add('Размер файла  '+IntToStr(FStream.Size));
   Sock.SendText(IntToStr(Length(m))+'#'+m);
   i:=0;
   SendFile;
  end;


procedure TTHreadSock.SendFile;
begin
i:=Sock.SendBuf(p^, FStream.Size);
 Form1.Memo1.Lines.Add('Отдали  '+IntToStr(i));
{if i=FStream.Size then  }
  begin
 FStream.Free;
 FGive:=false;
 Form1.Memo1.Lines.Add('Отдача завершена '+FName);

 end;
end;



и клиент(принимет запросившие файлы)
Код:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 if lencom<>0 then
 tmp:=Socket.ReceiveText
 else tmp:=tmp+Socket.ReceiveText;

 if not bool then
  begin
   if lencom=0 then begin
    lencom:=strtoint(copy(tmp,1 , pos('#',tmp)-1));
    delete(tmp,1 , pos('#',tmp));
    Fname:= copy(tmp,1 , pos('#',tmp)-1);
    delete(tmp,1 , pos('#',tmp));
    FSize:= strtoint(copy(tmp,1 , pos('#',tmp)-1));
    delete(tmp,1 , pos('#',tmp));
    bool:=true;
    buf:=TMemoryStream.Create;
    buf.Position:=0;
   end;
  end else
end;

вот поток который проверяет наличие пришедшего текста
Код:
procedure TTt.Execute;
begin
  Sleep(1000);
  if bool then
   Form1.wriiite;
end;

а вот запись файла в стрим

Код:
procedure TForm1.wriiite;
begin
  k:=FSize-buf.Size;
  tt:=copy(tmp, 1, k);
  delete(tmp,1 ,length(tt));
  buf.Write(tt[1], length(tt));
  if buf.Size=FSize then
   begin
    buf.Position:=0;
    buf.SaveToFile(fname);
    buf.Free;
    bool:=false;
    lencom:=0;
   end;
end;
Ответить с цитированием