link8662 link8663 link8664 link8665 link8666 link8667 link8668 link8669 link8670 link8671 link8672 link8673 link8674 link8675 link8676 link8677 link8678 link8679 link8680 link8681 link8682 link8683 link8684 link8685 link8686 link8687 link8688 link8689 link8690 link8691 link8692 link8693 link8694 link8695 link8696 link8697 link8698 link8699 link8700 link8701 link8702 link8703 link8704 link8705 link8706 link8707 link8708 link8709 link8710 link8711 link8712 link8713 link8714 link8715 link8716 link8717 link8718 link8719 link8720 link8721 link8722 link8723 link8724 link8725 link8726 link8727 link8728 link8729 link8730 link8731 link8732 link8733 link8734 link8735 link8736 link8737 link8738 link8739 link8740 link8741 link8742 link8743 link8744 link8745 link8746 link8747 link8748 link8749 link8750 link8751 link8752 link8753 link8754 link8755 link8756 link8757 link8758 link8759 link8760 link8761 link8762 link8763 link8764 link8765 link8766 link8767 link8768 link8769 link8770 link8771 link8772 link8773 link8774 link8775 link8776 link8777 link8778 link8779 link8780 link8781 link8782 link8783 link8784 link8785 link8786 link8787 link8788 link8789 link8790 link8791 link8792 link8793 link8794 link8795 link8796 link8797 link8798 link8799 link8800 link8801 link8802 link8803
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