- я использую TIdTCPServer и TIdTCPClient, как клиент и сервер находятся на одной и той же локальной сети с 100 Мбит
- нужно отправить файлы до 2 Мб каждый
- У меня нет опыта с Инди и гнездо программирования
* После того, как запрос клиента отправить на сервер, он затем цикл до отключения от сервера, файл создается с самим клиентом, но имеет 0 байт размеромНужна помощь отправки файла с Инди
IdTCPServer.OnExecute ...
begin
CS.Enter;
try
InputString := AThread.Connection.ReadLn;
if InputString = 'PIC' then begin
AFullFileName := FFilePath + 'PIC01.jpg';
if FileExists(AFullFileName) then begin
AFileStream := TFileStream.Create(AFullFileName, fmOpenRead + fmShareDenyNone);
AThread.Connection.OpenWriteBuffer;
AThread.Connection.WriteStream(AFileStream);
AThread.Connection.CloseWriteBuffer;
FreeAndNil(AFileStream);
end;
AThread.Connection.Disconnect;
end;
except
on E : Exception do
ShowMessage(E.Message);
end;
CS.Leave;
end;
Client.OnButtonClick ...
begin
with IdTCPClient do begin
if Connected then Disconnect;
Host := '127.0.0.1';
Port := 2018;
Connect;
WriteLn('PIC');
//different folder with server's folder
if FileExists(FFilePath + 'PIC01.jpg') then
DeleteFile(FFilePath + 'PIC01.jpg');
AFileStream := TFileStream.Create(FFilePath + 'PIC01.jpg', fmCreate);
while Connected do
ReadStream(AFileStream, -1, true);
FreeAndNil(AFileStream);
Disconnect;
end;
end;
Спасибо всем.
Больше вопросов, я на самом деле начал копируя пример кода Инди, в соответствии с вашими советы, когда ReadStream() должен быть в цикле ??? – Artisan
Мне не нужен критический раздел ???, что это на самом деле? :( – Artisan
Все методы внутри OnExecute должны быть потокобезопасными справа ?, включая доступ к VCL. – Artisan