Программирование на C++ глазами хакера


Обмен данными - часть 4


Функция выглядит следующим образом:

BOOL TransmitFile( SOCKET hSocket, HANDLE hFile, DWORD nNumberOfBytesToWrite, DWORD nNumberOfBytesPerSend, LPOVERLAPPED lpOverlapped, LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, DWORD dwFlags );

Рассмотрим ее параметры:

  • hSocket — сокет, через который нужно отправить данные;
  • hFile — указатель на открытый файл, данные которого надо отправить;
  • nNumberOfBytesToWrite — количество отправляемых из файла байт. Если указать о, то будет отправлен весь файл;
  • nNumberOfBytesPerSend — размер пакета для отправки. Если указать 1024, то данные будут отправляться пакетами в 1024 байт данных. Если указать 0, то будет использовано значение по умолчанию;
  • lpOverlapped — используется при перекрестном вводе/выводе;
  • lpTransmitBuffers — содержит служебную информацию, которую надо послать до и после отправки файла. По этим данным на принимающей стороне можно определить начало или окончание передачи;
  • dwFlags — флаги. Здесь можно указать следующие значения:

  • TF_DISCONNECT — закрыть сокет после передачи данных;
  • TF_REUSE_SOCKET — подготовить сокет для повторного использования;
  • TF_WRITE_BEHIND — завершить работу, не дожидаясь подтверждения о получении данных со стороны клиента.

Параметр lpTransmitBuffers имеет тип структуры следующего вида:

typedef Struct _TRANSMIT_FILE_BUFFERS { PVOID Head; DWORD HeadLength; PVOID Tail; DWORD TailLength; } TRANSMIT_FILE_BUFFERS;

У этой структуры следующие параметры:

  • Head — указатель на буфер, содержащий данные, которые надо послать клиенту до начала отправки файла;
  • HeadLength — размер буфера Head;
  • Tail — указатель на буфер, содержащий данные, которые надо послать клиенту после завершения отправки файла;
  • TailLength — размер буфера Tail.




Начало  Назад  Вперед



Книжный магазин