Przesłanie obiektu przez INDY

0

Cześć, wiem jak za pomocą Indy (TCPClient, server) przesłać tekst i na niego zareagować po stronie serwera.

Natomiast, czy da się jakoś za pomocą tych komponentów przesłać obiekt?
Najlepiej, gdyby się dało przesłać za jednym razem i tekst, i obiekt.

0

najpierw tworzysz strumien

Strumien := TMemoryStream.create;
Strumien.WriteComponent(Nazwa_Komponentu);

poza metoda do wysylania textu w komponencie serwera
jest tez metoda do wysylania danych (cos w stylu send() albo podobnie)

podajesz w niej dwa parametry:
dane (np w postaci strumienia)
i ich rozmiar

odbierasz w ten sposob, ze tworzysz sobie strumien po stronie serwera
i dopisujesz do niego kolejne dane otrzymane przez server. Az do momentu
gdy rozmiar strumienia bedzie rowny rozmiarowi wyslanych danych.

potem juz tylko wczytujesz komponent ze strumienia:
Strumien.readcomponent(Nazwa_komponentu);

oczywiscie server musi najpierw znac rozmiar przesylanych danych
zeby wiedzial kiedy przestac doklejac do strumienia kolejne dane.

poza tym zazwyczaj nie warto przesylac calego obiektu
-lepiej przeslac jakies jego parametry (szybciej, latwiej, wygodniej...)

:-/ sorki za chaotyczna wypowiedz ale sie spiesze:-P

0

Przesyłanie obiektu przez serializację, a z tym powyżej właśnie mamy do czynienia, może być niebezpieczne dla stabilności programu, bo adresy, które są aktualne w systemie/aplikacji po jednej stronie łącza wcale nie muszą (i zwykle nie są) prawidłowe po drugiej stronie.

Lepiej przesyłać same dane i po drugiej stronie przygotowaną funkcją aktualizować istniejący tam obiekt.

1 użytkowników online, w tym zalogowanych: 0, gości: 1