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

mibin

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

mibin

Well-Known Member
29.01.2009
48
0
29
Видное
#2
Ну что? Неужели никто не знает как с помощью INDY 11 компонентов послать структуру? Ну е мое?
 

mibin

Well-Known Member
29.01.2009
48
0
29
Видное
#3
Вот как это делается для случая со статическими структурами, как мне подсказали на другом форуме для работы с динамическими нужно еще передать размер струтуры (см. код листинг 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);