Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сокеты. Перекачка файла. Глюк! [D5, Win2k]


BJValentine ©   (2004-07-14 13:41:00) 

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



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.


False_Delirium   (2004-07-15 13:58:00) [1]

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


BJValentine   (2004-07-15 13:15:00) [2]

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


False_Delirium   (2004-07-15 11:11:00) [3]

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


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

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


BJValentine   (2004-07-14 14:15:00) [5]

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


Digitman   (2004-07-14 13:58:00) [6]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо