логирование recv....

Тема в разделе "WASM.BEGINNERS", создана пользователем delsa, 18 май 2007.

  1. delsa

    delsa New Member

    Публикаций:
    0
    Регистрация:
    11 май 2007
    Сообщения:
    9
    Доброго времени суток!
    Нашел статьи Ms-Rem и решил попробовать на практике. большое человеческое спасибо Ms-Rem за них)
    возникла небольшая проблемка.
    Как залогировать буфер из recv в текстовый файл
    как не бился сохраняется всякая не читаямая ересь.....
    С буфером из send все логируется нормально......

    Код (Text):
    1.  
    2. function Nrecv(s: TSocket; Buf: pchar; len, flags: Integer): Integer; stdcall;
    3. ......
    4. var
    5. ......
    6. i:integer;
    7. st:string;
    8. begin
    9. .......
    10. while i < len do
    11.  begin
    12. st:=st+buf[i];
    13. inc(i);
    14. AssignFile(f,'recv.txt');
    15. Append(f);
    16. WriteLn(f,'coket:-'+floattostr(s)+st);
    17. CloseFile(f);
    18.  
    19. .......
    20. end;
    Подскажите как раскодировать буфер из recv и сохранить в текстовый файл.
    Заранее благодарен!
    Сильно не бейте я маленький=)
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Код (Text):
    1. int new_recv(int fd, void* buffer, int maxlen, int flags)
    2. {
    3.   void* my_buf = malloc( maxlen );
    4.   int bytes = original_recv( fd, my_buf, maxlen, flags );
    5.  
    6.   // обработка
    7.  
    8.   HANDLE hLog = CreateFile("log.log", ... );
    9.   if( hLog != INVALID_HANDLE_VALUE )
    10.   {
    11.     DWORD w;
    12.     WriteFile( hLog, my_buf, bytes, &w, 0 );
    13.     CloseHandle( hLog );
    14.   }
    15.  
    16.   memcpy( buffer, my_buf, bytes );
    17.   free( my_buf );
    18.   return bytes;
    19. }
    ну примерно так.. на С++
     
  3. delsa

    delsa New Member

    Публикаций:
    0
    Регистрация:
    11 май 2007
    Сообщения:
    9
    Great
    спасибо =))
    тока я с си жалко не дружу....можешь прокоментировать чуть чуть =)

    а может у кого на делфи есть?
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А че тут комментировать то, почти везде апишки.
    короче вызываешь оригинальную функцию recv и пихаешь результат во внутренний свой буфер. потом, если надо, обрабатываешь его, потом логируешь в файл, потом копируешь в пользовательский буфер, освобождаешь внутренний, и возвращаешься.
     
  5. delsa

    delsa New Member

    Публикаций:
    0
    Регистрация:
    11 май 2007
    Сообщения:
    9
    Great
    попробую
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Маленькое уточнение: делай SetFilePointer на конец файла - иначе просто будешь затирать в файле лога каждым последующим recv данные из каждого предыдущего.
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    MSoft
    ну это да ) я просто сначала хотел написать с FILE* и fopen(..., "a+")/fwrite, а потом передумал :)
    ну вообще еще неплохо добавить время логирования и прочее.
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Я вообще не понял, в чем проблема изначально была. Может имелось ввиду, что нужна конвертация hex->ascii? А то мне кажется, что он сохраняет бинарные данные, а в текстовом редакторе хочет их нормально увидеть. Ладно, будут проблемы, может уточнит вопрос.
     
  9. delsa

    delsa New Member

    Публикаций:
    0
    Регистрация:
    11 май 2007
    Сообщения:
    9
    MSoft
    я раньше с "инет технологиями" =)) никогда не связывался.......
    короче посидел порылся немного и нашел в чем дело .....данные клиенту приходят и сохраняются в текстовый файл......только они запакованы q-zip ......
    вопрос как этот q-zip обойти или раскрыть данные на "лету"!!

    или может у кого нить есть dll c функцией типа q_zip(buf:PCHAR; len:integer;):string; =)); где результат девственно чистая сторока buf