Конференция "Сети" » Проблемы с передачей файла от сервера клиенту и наоборот [D7]
 
  • dron9999 © (03.05.09 18:23) [0]
    Привет ! всем прошу помочь разобраться с такой проблемой ! нашел пример для пересылки файла но почему то когда передаю файл клиенту то приходит не весь размер файла не хватает 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;
    ------------------------------------------------
    может чего не увидел !

  • Сергей М. © (03.05.09 21:48) [1]
    Что лично ты сделал для того чтобы "разобраться с проблемой" ?
    Какие конкретно усилия и действия для понимания и отладки чужого кода ты предпринял ?
  • dron9999 © (04.05.09 07:27) [2]
    извиняюсь не правильно выложил код
    Ошибка в Constant expression violates subrange bounds
    begin
              AssignFile(TInfo^.BFile,TInfo^.LocalFile);
              FileMode:=ofOpenRead; <---------------- ошибка  
     {$i+ }   Reset(TInfo^.BFile);   {$i- }

    думаю нужно указать в Constant
    ну пример
    const
    ofOpenRead  = $????????;
    буду искать спс !
  • dron9999 © (04.05.09 09:12) [3]
    Нет не получается в 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 байт)
  • Сергей М. © (04.05.09 09:42) [4]
    см. [1]
 
Конференция "Сети" » Проблемы с передачей файла от сервера клиенту и наоборот [D7]
Есть новые Нет новых   [134435   +33][b:0][p:0.002]