• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Передача структурированного типа данных "запись" по локально

  • Автор темы DimonSoft
  • Дата начала
D

DimonSoft

Всем доброго времени суток!
При написании игры с сетевой поддержкой столкнулся с необходимостью передать данные типа RECORD (либо массив записей). Для работы с сетью использую компоненты TServerSocket и TClientSocket.
Может кто-нибудь подскажет как передать подобную структуру целиком:

[codebox]Rec = record
Name: string;
Point: word;
X, Y: integer;
end;[/codebox]

и принять ее. :)

Книги и поиск в интернете результатов не дал.

Всем заранее благодарен за помощь!
 
D

DimonSoft

Неужели никто не знает как это сделать?!
Я пробовал передавать процедурами SendBuf/ReceiveBuf, но такая передача работает очень нестабильно.
 
S

SoCi0pAt

для обмена данными по сети я использовал компоненты indy. запись частями загонял частями в memorystream, сначала отправлял размер потока памяти, а потом и сам поток. работало как часы, но размер передаваемых данных бел не особо велик. полагаю, в твоем случае схема действий не особо должна отличаться. ;)
 
Z

zubr

Тут проблема в использовании типа string в структуре. Дело в том, что string по большому счету - это адрес в памяти, а смысл передавать адрес строки находящейся на другом компе, даже нет смысла, передавать адрес в другой процесс.
Как вариант можно использовать вместо string - string[255]
 
S

SoCi0pAt

не вижу проблем с строками любой длины. зачем "утяжелять" передачу? может у него в строках по 3-5 символов?

Код:
i:=length(str);
MemStrm.Write(i,SizeOf(i));				  //пишем в поток длину строки
MemStrm.WriteBuffer(PChar(str)^,i);	//пишем саму строку

на стороне приема в том же порядке извлекаем из потока

З.Ы.: Тема старенькая ;) автару уже давно пофиг
 
D

DimonSoft

Программа конечно уже давно дописана. Правда пришлось обойтись без структуры.

З.Ы.: Тема старенькая laugh.gif автару уже давно пофиг

Хоть и старенькая, а учиться никогда не поздно. Так что спасибо за ответы. В другой раз буду знать как реализовывать подобную передачу информации.
 
Мы в соцсетях:

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