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

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

Проблемы с передачей файла от сервера клиенту и наоборот [D7]


dron9999 ©   (2009-05-03 18:23:00) 

Привет ! всем прошу помочь разобраться с такой проблемой ! нашел пример для пересылки файла но почему то когда передаю файл клиенту то приходит не весь размер файла не хватает 200 -150 байт
Вот сам код ! .....

сервер...
-----------------------------------
procedure TForm1.SSClientRead(Sender: PObj; Socket: PCustomWinSocket);
var
  TInfo:PTrasnferInfo;
  p,r:Integer;
  Dta,f:string;
  Buffer:array [1..200] of Char;

begin
  Dta:=Socket.ReceiveText;
  if Socket.Data = nil then
  begin
     try
        New(TInfo);
        f:=Chr(13);
        p:=Pos(f,Dta);
        TInfo^.LocalFile:=Copy(Dta,1,p  -1);
        TInfo^.Action:=TTransferAction(Str2Int(Copy(Dta,p + 1,Length(Dta))));
        if TInfo^.Action = taDownload1 then
        begin
           AssignFile(TInfo^.BFile,TInfo^.LocalFile);
           FileMode:=ofReadOnly;
  {$i+ }   Reset(TInfo^.BFile);   {$i- }

        end
        else if TInfo^.Action = taUpload1 then
        begin
           AssignFile(TInfo^.TFile,TInfo^.LocalFile);
           ReWrite(TInfo^.TFile);
           CloseFile(TInfo^.TFile);
        end;

        Socket.Data:=TInfo;                      
        if TInfo^.Action = taDownload1 then
         Socket.SendText(Int2Str(FileSize(TInfo^.LocalFile)))
 else
  if TInfo^.Action = taUpload1 then
        Socket.SendText('C');
     except
        Socket.SendText('Can''t access file...');
        Exit;
     end;
  end
  else
  begin
      TInfo:=Socket.Data;
  if  TInfo^.Action = taDownload1 then
  begin
        p:=FilePos(TInfo^.BFile);
        BlockRead(TInfo^.BFile,Buffer,200,r);
        r:=FileSize(TInfo^.LocalFile);
        Dta:=string(Buffer);
  if (r - p) < 200 then
        Dta:=Copy(Dta,200,r - p);
        Socket.SendText(Dta);
  end
  else
  if TInfo^.Action = taUpload1 then
     begin
        Write(TInfo^.TFile,Dta);
        Socket.SendText('C');
        CloseFile(TInfo^.TFile);
    end;
     end;
       end;
------------------------------------------------
может чего не увидел !


Сергей М.   (2009-05-04 09:42:00) [1]

см. [1]


dron9999   (2009-05-04 09:12:00) [2]

Нет не получается в KOL.pas
есть вот это
//[OpenFile CONSTANTS]
const
 ofOpenRead          = {$IFDEF LIN} O_RDONLY {$ELSE} $80000000 {$ENDIF};
{* Use this flag (in combination with others) to open file for "read" only. }
то есть...
const
ofOpenRead          = $00000008 ;
--------------------------------
но при закачки
на клиент останавливается на 99% =( 12,5 МБ (13 194 481 байт) из 12,5 МБ (13 194 592 байт)
на сервер файл не закачивается  0 из 12,5 МБ (13 194 592 байт)


dron9999   (2009-05-04 07:27:00) [3]

извиняюсь не правильно выложил код
Ошибка в Constant expression violates subrange bounds
begin
          AssignFile(TInfo^.BFile,TInfo^.LocalFile);
          FileMode:=ofOpenRead; <---------------- ошибка  
 {$i+ }   Reset(TInfo^.BFile);   {$i- }

думаю нужно указать в Constant
ну пример
const
ofOpenRead  = $????????;
буду искать спс !


Сергей М.   (2009-05-03 21:48:00) [4]

Что лично тысделал для того чтобы "разобраться с проблемой" ?
Какие конкретно усилия и действия для понимания и отладки чужого кода ты предпринял ?


Наверх

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