Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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);
Ответить с цитированием
  #2  
Старый 08.10.2008, 08:24
somlich somlich вне форума
Прохожий
 
Регистрация: 03.11.2006
Сообщения: 19
Репутация: 10
По умолчанию

Что то тишина в форуме. Ну в общем решиля я так если не передается несколько файлов, значит нужно передать один файл. Я установил 7z и через консольную команду все нужные мне файлы заархивировал в архив и вот его то передал по сетке, потом просто разархивировал его на компе клиента. Если интересно, то могу выставить код
Ответить с цитированием
  #3  
Старый 05.05.2009, 15:05
VladimirD VladimirD вне форума
Прохожий
 
Регистрация: 15.03.2009
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от somlich
Что то тишина в форуме. Ну в общем решиля я так если не передается несколько файлов, значит нужно передать один файл. Я установил 7z и через консольную команду все нужные мне файлы заархивировал в архив и вот его то передал по сетке, потом просто разархивировал его на компе клиента. Если интересно, то могу выставить код
Мне интересно, буду благодарен за код.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter