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

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

DimonSoft

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

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

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

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

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

DimonSoft

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

SoCi0pAt

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

zubr

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

SoCi0pAt

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

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

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

DimonSoft

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

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