-
sashap (15.06.08 10:44) [0]Добрый день!
...и сразу к делу!
Есть TClientSocket и TServerSocket в блокирующем режиме. Клиент коннектится к серверу и передает много больший файлов.
Вот кусок из кода клиента:...
var
SocketStream:TWinSocketStream;
FS:TFileStream;
begin
...
SocketStream:= TWinSocketStream.Create(ClientSocket^.Socket,10000);
...
for i:= 1 to file_count do
try
FS:= TFileStream.Create(filenames[i], fmOpenRead);
SocketStream.CopyFrom(FS, FS.Size);
finally
FS.Free;
end;
...
end;
У клиента также есть Timer, который каждую секунду выводит на StatusBar'e количество отправленных байт. Как можно узнать это в процессе передачи файла (т.к. он очень большой, для того, чтобы ждать окончания передачи)?
Я пробовал FS.Position и SocketStream.Size, но они не подходят... -
Сергей М. © (15.06.08 15:33) [1]Следует пользовать своего наследника класса TWinSocketStream с перекрытым вирт.методом Write, в теле которого вызывается метод предка, параметры и результат вызова которого дают исчерпывающую инф-цию по интересующему вопросу.
-
sashap (15.06.08 15:59) [2]Спасибо за ответ! =)
Перефразированный вопрос:
Можно ли в процессе работы TWinSocketStream'а узнать, сколько байт он отослал? Или, Можно ли узнать, на какой стадии находится передача TFileStream (TFileStream.Position не работает)?
Извините, что неправильно выразился. -
Сергей М. © (15.06.08 16:01) [3]
> Можно ли в процессе работы TWinSocketStream'а узнать, сколько
> байт он отослал?
см. [1]
> Или, Можно ли узнать, на какой стадии находится передача
> TFileStream
Тоже самое, но перекрывать следует Read -
sashap (15.06.08 19:23) [4]Огромное спасибо!
Теперь все работает отлично!