Вниз
Скачать: CL | DM;

Сокеты. Перекачка файла. Глюк!   Найти похожие ветки 

 
BJValentine   (2004-07-14 13:41) [0]

Перекачиваю файл. На сервере



procedure TForm1.SS1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var St: TFileStream;
begin
   if Socket.ReceiveText<>"1" then Exit;
   St:=TFileStream.Create("C:\Downloads\bro.avi",fmOpenRead);
   Socket.SendStream(St);
end;




на клиенте:



procedure TForm1.CS1Read(Sender: TObject; Socket: TCustomWinSocket);
var
  Buf:^byte;
  Len: Integer;
  f: File;

begin
  Len:=Socket.ReceiveLength;

  GetMem(buf,len);
  Socket.ReceiveBuf(Buf^,len);
  AssignFile(f,"c:\2.avi");
  if isRecStart then
     begin
        Rewrite(f,1);
        isRecStart:=false;
     end
  else
     begin
        Reset(f,1);
        seek(f,FileSize(f));
     end;
  BlockWrite(f,Buf^,len);
  Gauge1.Progress:=Gauge1.Progress+(len div 10);
  CloseFile(f);
  FreeMem(buf,len);
end;



Копирует, но на машине - приёмнике этот файл почему-то больше чуток чем файл-источник :-( Причём каждый раз разница в размерах разная. Сравнивал начала и окончания этих файлов визуально - одинаковые! Почему, где искать ошибку? Сравнил эти файлы: в файле - приёмнике обнаружены вставки неопределённой длины символов #0.


 
Digitman ©   (2004-07-14 13:58) [1]

вот тебе пища для размышления : ReceiveBuf() - это ф-ция, и она возвращает некий результат весьма важного характера


 
BJValentine   (2004-07-14 14:15) [2]

Спасибо, пища переварилась как следует!


 
BJValentine   (2004-07-15 10:39) [3]

А что нужно изменить на сервере, чтобы была возможность передавать данные блоками? Вдруг связь прервётся. Хочу, чтобы была возможность докачки.


 
False_Delirium ©   (2004-07-15 11:11) [4]

Посылать на сервер при возобновлении соединения кол-во принятых байт и требовать оставшиеся.:)


 
BJValentine   (2004-07-15 13:15) [5]

Дык это понятно и пегасу :-) Только как мне отправить данные с сервака с нужного места файла?


 
False_Delirium ©   (2004-07-15 13:58) [6]

В потоке позицию выставляешь, смещения от начала на кол-во прочитаных байт.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.037 c
3-1093380738
ceval
2004-08-25 00:52
2004.09.19
Подскажите как заменить ADOTable на ADOQuery


3-1093002969
MaXie
2004-08-20 15:56
2004.09.19
Из жизни потоков2


3-1093095065
Koala
2004-08-21 17:31
2004.09.19
Ошибка при создании триггера (Parsing error)


4-1091624090
А. Н. Оним
2004-08-04 16:54
2004.09.19
WMI &amp; Network Adapter


1-1094188938
Death
2004-09-03 09:22
2004.09.19
Настройка внутренней сети




   Наверх