Это кодированиеПожалуйста, помогите, как отправлять изображения с клиента на сервер?
procedure TForm1.IdTCPServerExecute(AThread: TIdPeerThread);
var
InputString: string;
ACommand: string[1];
AFileName: string;
ATempFileName: string;
AFileStream: TFileStream;
begin
InputString := UpperCase(AThread.Connection.ReadLn);
ACommand := Copy(InputString, 1, 1);
AFileName := FPicFilePath + Copy(InputString, 2, 5) + '.jpg';
if ACommand = 'R' then begin
AFileStream := TFileStream.Create(AFileName, fmOpenRead + fmShareDenyNone);
try
AThread.Connection.WriteStream(AFileStream, true, true);
finally
AFileStream.Free;
end;
end else if ACommand = 'S' then begin
ATempFileName := FPicFilePath + 'TEMP.jpg';
if FileExists(ATempFileName) then
DeleteFile(ATempFileName);
AFileStream := TFileStream.Create(ATempFileName, fmCreate);
try
AThread.Connection.ReadStream(AFileStream, -1, false);
//RenameFile(ATempFileName, AFileName);
finally
AFileStream.Free;
end;
end;
AThread.Connection.Disconnect;
end;
мой сервер И это мой клиент кодирование
procedure TForm1.SendImageToServer(ASendCmd: string);
var
AFileStream: TFileStream;
begin
MessageDlg('Sending ' + ASendCmd + ' :' + FSendFileName, mtInformation, [mbOK], 0);
Screen.Cursor := crHourGlass;
with IdTCPClient do begin
if Connected then Disconnect;
Host := '127.0.0.1';
Port := 2108;
AFileStream := TFileStream.Create(FSendFileName, fmOpenRead);
try
try
Connect;
try
WriteLn(ASendCmd);
WriteStream(AFileStream, true, false);
finally
Disconnect;
end;
finally
AFileStream.Free;
end;
except
end;
end;
Screen.Cursor := crDefault;
end;
Я могу успешно получить изображения с сервера, но когда я должен был послать новый образ обратно на сервер, я просто был пустой TEMP.jpg.
Пожалуйста, помогите. Спасибо.
Delphi 5, Indy 9
Я подозреваю, что вы должны отправить длину файла заранее. Процитируйте ваш файл справки indy9 о 'AThread.Connection.ReadStream' –
Я думаю, что только клиент должен вызывать метод' Disconnect'. Зачем использовать 'Disconnect' как сервер, так и клиентскую сторону? – AndreaBoc
@ Arioch'The: OP устанавливает параметр «AWriteByteCount» WriteStream() в true на стороне сервера, поэтому он отправляет длину файла заранее, но он не делает то же самое на стороне клиента, хотя сервер ожидает этого. –