C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как передать TList по сокету?
telepath
Отправлено: 05.10.2004, 10:00


Станционный диспетчер

Группа: Участник
Сообщений: 132



Не подскажете?
Подозреваю что через Socket->SendBuf но что-то не получается
Guest
Отправлено: 05.10.2004, 10:13


Не зарегистрирован







Преобразовать к строке. передать. развернуть в структуру.
telepath
Отправлено: 05.10.2004, 10:28


Станционный диспетчер

Группа: Участник
Сообщений: 132



Хм... А вот так можно?
CODE

TList* recs = new TList();
Socket->SendBuf((void*)recs,sizeof(recs)+1);
Guest
Отправлено: 05.10.2004, 10:38


Не зарегистрирован







А попробовать слабо?
TList енто список указателей. На что они будут указывать у приемника? Если нуно массив целых чисел, то так и пишите, а если TList — то без дополнительного описания элементов списка не обойтись.
telepath
Отправлено: 05.10.2004, 10:56


Станционный диспетчер

Группа: Участник
Сообщений: 132



Есть класс TClass, нужно передать кучу таких классов собранных в TList за одну передачу
CODE

TList* list = new TList();
TClass* myclass = new TClass();

list->Add(myclass);



Как можно этот TList передать (вместе с содержащимися в нем объектами) через сокет и принять?
Konstantine
Отправлено: 05.10.2004, 11:13


Мастер участка

Группа: Модератор
Сообщений: 545



QUOTE (telepath @ 05/10/2004, 11:30)
Хм... А вот так можно?
CODE

TList* recs = new TList();
Socket->SendBuf((void*)recs,sizeof(recs)+1);

ну и шо ты будешь делать на удалённой машине с указателем с этого???

на самом деле — создавай протокол передачи — самый простой — какой-то символ, который будет строки разделять, передавай этот буфер, а там рассшифровуй
Guest
Отправлено: 05.10.2004, 11:21


Не зарегистрирован







Что то вроде такого
На стороне источника
AnsiString text = ClassName1 + "\n" + ClassName2 + "\n" + ...

На стороне приемника
TList *list = new TList();
TStringList *slist (полученная строка)
TClass1 *pc1;
TClass2 *pc2;
AnsiString classname;
...
for (int i=0; i < slist->Count; i++)
{ classname = slist->Items[i];
if (classname == "Class1") { pc1 = new TClass1; list->Add(pc1); }
else if (classname == "Class2") { pc2 = new TClass2; list->Add(pc2); }

PS. Осмелюсь еще раз напомнить — TList хранит только УКАЗАТЕЛИ. А вам скорее всего нужно передать начинку ваших объектов. Для этого нужен другой метод.
...
}

Вернуться в Вопросы программирования в C++Builder