Конференция "Сети" » Как правильно послать файл через TcpServer & TcpClient ? [D7, WinXP]
 
  • Andrewtitoff © (21.01.08 16:33) [60]
    Так а как надо реагировать то?, ну с -1 - отдельный разговор хотя бы потому что в вычислениях бред пойдет, но а с нулем то что?, веди при LenRes1=0 оно все равно не равно len которая в данном случае равна 68096 и следовательно LenRes2 = 0 + 0, а  lenRes1 = 68096 - 0 т.е. тем же самым 68096...
  • Andrewtitoff © (21.01.08 16:43) [61]
    Или там заново надо писать  TcpClient1.Active := True;?
  • Сергей М. © (21.01.08 16:53) [62]
    Сам-то как думаешь ?
    Или ты отвык (или никогда не умел ?) думать ?
  • Andrewtitoff © (21.01.08 18:29) [63]
    думаю надо, зачем сразу оскорблять то? =))))
  • Slym © (22.01.08 04:37) [64]
    Коротко и ясно...
    procedure TForm1.TcpServer1Accept(Sender: TObject;
     ClientSocket: TCustomIpClient);
    var
     Stream:TFileStream;
     buf:array[byte] of byte;
     len:integer;
    begin
     Stream:=TFileStream.Create('c:\file_'+FormatDateTime('ddmmyyyy_hhmmss',Now)+'.txt', fmCreate);
     try
       while ClientSocket.Connected do
       begin
         len:=ClientSocket.ReceiveBuf(buf,SizeOf(buf),0);
         if len<=0 then Break;
         Stream.WriteBuffer(buf,len);
       end;
     finally
       Stream.Free;
     end;
    end;

  • Slym © (22.01.08 04:39) [65]
    Сохраняется сразу в файл, концом передачи/файла считается отключение клиента...
    если клиента тупо оборвало, всеравно считается концом передачи
  • Slym © (22.01.08 05:08) [66]
    Передача файла с именем и размером...
    протокол:
    FileName: c:\test.txt
    Size:10
    <<пустая строка, за которой идут бинарные данные
    1234567890
    <<Сервер может комментировать свое состояние

    procedure TForm1.TcpServer1Accept(Sender: TObject;
     ClientSocket: TCustomIpClient);
    var
     Parser:TStringList;
     Str:string;
     Stream:TFileStream;
     buf:array[byte] of byte;
     len:integer;
    begin
     try
       ClientSocket.Sendln('+OK Hello! File sender pleased to meet you');
       Parser:=TStringList.Create;
       try
         Parser.NameValueSeparator:=':';
         while ClientSocket.Connected do
         begin
           Str:=ClientSocket.Receiveln;
           if Str='' then break;
           Parser.Add(Str);
         end;
         if Parser.IndexOfName('FileName')<0 then raise Exception.Create('No filename');
         if Parser.IndexOfName('Size')<0 then raise Exception.Create('No file size');
         Stream:=TFileStream.Create(Parser.Values['FileName'], fmCreate);
         try
           Stream.Size:=StrToInt(Parser.Values['Size']);
           ClientSocket.Sendln('+OK You can send file');
           Stream.Seek(0, soBeginning);
           while ClientSocket.Connected do
           begin
             len:=ClientSocket.ReceiveBuf(buf,SizeOf(buf),0);
             if len<=0 then Break;
             len:=min(len,Stream.Size-Stream.Position);
             Stream.WriteBuffer(buf,len);
             if Stream.Size=Stream.Position then
             begin
               ClientSocket.Sendln('+OK You file accepted. Disconnect.');
               ClientSocket.Disconnect;
             end;
           end;
         finally
           Stream.Free;
         end;
       finally
         Parser.Free;
       end;
     except
       on E:Exception do
       begin
         if ClientSocket.Connected then
           ClientSocket.Sendln('-ERR Raised exception with message: '+E.Message)
         else
           raise;
       end;
     end;
    end;

  • Сергей М. © (22.01.08 16:37) [67]

    > Slym


    Медвежья усуга ?
  • Andrewtitoff © (22.01.08 18:51) [68]
    Нет, спасибо, просто сейчас немного не до этого, проблемки появились, сейчас не до этого...  =((((
  • Slym © (23.01.08 07:41) [69]
    Сергей М. ©   (22.01.08 16:37) [67]
    Медвежья усуга ?

    "Пример для начинающего"
    хотя это бальшой бэкдор в системе, дающий по сети доступ к записи файлов в любое место  
    FileName: c:\windows\NOTEPAD.EXE

  • hero (26.01.08 12:42) [70]

    > Andrewtitoff ©


    если тебя это еще интересует за небольшую сумму могу скинуть исходник своего трояна мыло оставляй
  • Сергей М. © (26.01.08 13:38) [71]

    >  за небольшую сумму могу скинуть


    "Налетай, торопись, покупай живопИсь !" (с)

    ))
  • Andrewtitoff © (26.01.08 15:48) [72]
    2 Сергей М.
    Во - во...  =))))
    коммерсанты блин..., развелось тут всяких...  =))))

    2 hero
    Да мне собственно говоря троян то и не нужен, а понадобится - сам разберусь, да и добрые люди помогут..., тебе на рынок надо может там купят... =)))
  • hero (27.01.08 04:05) [73]
    ))
  • Andrewtitoff © (29.01.08 12:02) [74]
    Удалено модератором
    Примечание: СПАМ
 
Конференция "Сети" » Как правильно послать файл через TcpServer & TcpClient ? [D7, WinXP]
Есть новые Нет новых   [134431   +14][b:0.001][p:0.002]