• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Передача структуры по сети.

  • Автор темы mibin
  • Дата начала
M

mibin

Привет, есть необходимость передать структуру по сети.
Так вот для этого я пытался использовать компоненты TcpClient и TcpServer у них есть метод SendBuf но я все время получаю -1...то есть как я понимаю пустой буфер приходит...подскажите пожалуйста как передать структуру и еще так же я пытался пользоваться Indy компонентами (аналоги этих же), но там как я понимаю нужно переводить структуру в TByteDynArray или в TStream очень благодарен если вы мне подскажите как это сделать (перевод туда и обратно имею ввиду). Заранее спасибо.
 
M

mibin

Ну что? Неужели никто не знает как с помощью INDY 11 компонентов послать структуру? Ну е мое?
 
M

mibin

Вот как это делается для случая со статическими структурами, как мне подсказали на другом форуме для работы с динамическими нужно еще передать размер струтуры (см. код листинг 2)
C++:
struct _tAirplane {
int priority;
int fuel;
char name[10];
int emergency;
int passengers;
};
// при отправке делаем следующее

_tAirplane airplane;
TByteDynArray buf;
buf.Length = 0;
buf = RawToBytes(&airplane, sizeof(airplane));
Form1->IdTCPClient1->IOHandler->Write(buf);

// а вот прием

_tAirplane airplane;
TByteDynArray buf;

buf.Length = 0;

AContext->Connection->IOHandler->ReadBytes(buf, sizeof(airplane), false);
BytesToRaw(buf, &airplane, sizeof(airplane));
C++:
// Передача
TCPClient->Socket->WriteLn(IntToStr(PartSend->SendBuf->Size));
TCPClient->Socket->Write(PartSend->SendBuf);
//Прием
__int64 Size = StrToInt64(AContext->Connection->Socket->ReadLn());
AContext->Connection->Socket->ReadStream(CurrentPeer->SendBuf,Size,false);
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!