|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с передачей файлов через 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
|
|||
|
|||
Что то тишина в форуме. Ну в общем решиля я так если не передается несколько файлов, значит нужно передать один файл. Я установил 7z и через консольную команду все нужные мне файлы заархивировал в архив и вот его то передал по сетке, потом просто разархивировал его на компе клиента. Если интересно, то могу выставить код
|
#3
|
|||
|
|||
Цитата:
|