Показать сообщение отдельно
  #1  
Старый 01.10.2008, 08:48
somlich somlich вне форума
Прохожий
 
Регистрация: 03.11.2006
Сообщения: 19
Репутация: 10
Вопрос Проблема с передачей файлов через Indy Socket

В общем сделал программу для того чтоб передавать несколько файлов через сокет.
Работает, но передает только первый файл (картинку), клиент сохраняет ее но второй файл, который после цикла создается, но пустым. Если удаляю процедуру создания первого файла то второй файл записывается нормально, чувствую что ошибся в какой-то мелочи но понять не могу в какой???

Вот код сервера:
Код:
if sCommand = 'NAME' then
    begin
  
    pic:=MakeTest(sAction,sTip);
    ss:=pic;
    w:=0;
    for q:=1 to length(ss) do if copy(ss,q,1)=',' then w:=w+1;
    AThread.Connection.WriteLn(inttostr(w));

    for q:=1 to w do begin
        s:=copy(ss,pos(',',ss)+1,1000);
        if pos(',',s)>0 then begin
        s:=copy(ss,1,pos(',',ss)-1);
        ss:=copy(ss,pos(',',ss),1000);
        end ;
        AThread.Connection.WriteLn(s);
        fStream := TFileStream.Create(s,fmOpenRead	+ fmShareDenyNone);
        AThread.Connection.OpenWriteBuffer;
        AThread.Connection.WriteStream(fStream);
        AThread.Connection.CloseWriteBuffer;
        FreeAndNil(fStream);
     end;
    AThread.Connection.Disconnect;
    AThread.Connection.Connected;
    fStream := TFileStream.Create(ExtractFilePath(Application.ExeName)+'Data\Client\'+sAction+'.ini',fmOpenRead	+ fmShareDenyNone);
   // fstream.Position:=0;
    AThread.Connection.OpenWriteBuffer;
    AThread.Connection.WriteStream(fStream);
    AThread.Connection.CloseWriteBuffer;
    FreeAndNil(fStream);
  end;

Вот код клиента:

Код:
try
with IdTCPClient do
    begin
    if connected then DisConnect;
    Host := edit2.text;
    Port := StrToInt(edit3.text);
    Connect;
    WriteLn('NAME'+','+edit1.Text+','+Tip);
    w:=strtoint(readln);
    for q:=1 to w do begin
      e:=0;
      s:=readln;
      for w:=1 to length(s) do if copy(s,w,1)='\' then e:=w;
      s:=copy(s,e+1,100); // showmessage(s);
      if FileExists(ExtractFileDir(ParamStr(0)) + '\Data\Tests\' + s) then
        DeleteFile(ExtractFileDir(ParamStr(0)) + '\Data\Tests\' + s);
    ftmpStream := TFileStream.Create(ExtractFileDir(ParamStr(0)) + '\Data\Tests\' + s,fmCreate);
    while connected do
        ReadStream(fTmpStream,-1,true);
    FreeAndNil(fTmpStream);
     end;

   if FileExists(ExtractFileDir(ParamStr(0)) + '\Data\Tests\'+edit1.Text+'.ini') then
        DeleteFile(ExtractFileDir(ParamStr(0)) + '\Data\Tests\'  +edit1.Text+'.ini');
    ftmpStream := TFileStream.Create(ExtractFileDir(ParamStr(0)) + '\Data\Tests\' + edit1.Text+'.ini',fmCreate);
    while connected do
        ReadStream(fTmpStream,-1,true);
    FreeAndNil(fTmpStream);
     end;
    Button1.Enabled:=true;
    Disconnect;
    end;
except
on E : Exception do
    ShowMessage(E.Message);
Ответить с цитированием