![Старый](images/statusicon/post_old.gif)
01.10.2008, 08:48
|
Прохожий
|
|
Регистрация: 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);
|