Rekord przez socket

0

Czesc wszystkim,

mam problem z przesylaniem rekordow przez socket ktore zawieraja jako jedno z pol TMemoryStream. Wyslanie w porzadku. Na miejsce dochodzi pakiet o odpowiedniej wielkosci (suma <ort>pul </ort>+ wielkosc stream), ale nie ma sposobu zeby go <ort>urzyc </ort>:-(

Musze przesylac Stream razem z upisem wiec chcialem <ort>urzyc </ort>recordu, moze znacie jakas alternatywe???

// slownik!!!- Ł

0

Przeslac najpierw sam rekord z opisem, a pozniej za pomoca stream wyslac reszte.
Ja tak robie i dziala.

0

Tez o tym myslalem, ale troche sie obawiam, poniewaz jesli stream zostanie <ort>urzytyw </ort>ze zlym opisem <ort>morze </ort>spowodowac zalamanie aplikacji. Komunikacja przez socket jest absolutnie pewna (<ort>takrze </ort>jesli chodzi o kolejnosc przyjmowania pakietow) ???

// kurde, używaj słownika, bo wątek poleci do kosza - Ł

0

Po piersze w rekordzie zawierasz obiekt (wskaźnik) typu TMemoryStream, więc nie powinieneś go 'przesyłać', a jedynie jego dane.

Za 'niepewność' połączenia odpowiada system operacyjny. Nie musisz się tym zajmować - jeśli jednak przesyłasz dużo danych (P2P), może i warto dodać własną kontrolę, np.: przez MD5.

0

Kiedys sie bawilem w presylanie rekordow z memorystream i nie mialem z tym problemow, teraz nie mam delphi na kompie wiec nie zabardzo moge pomoc. Jedyne co pamietam to ze stream bylo trzeba przesowac na poczatek

0

Wysyłaj TMemoryStream.Memory^;

0

"Za 'niepewność' połączenia odpowiada system operacyjny. Nie musisz się tym zajmować - jeśli jednak przesyłasz dużo danych (P2P), może i warto dodać własną kontrolę, np.: przez MD5."

Jesli uzywa standardowych TSocket z Delphi to raczej musi sie martwic, ten komponent jakby w ogóle nie podlega prawa protokolu TCP (czyli gwarancja dojscia pakietu i w tej samej kolejnosci). Ja osobiscie przesiadlem sie na Indy bo z tamtym to juz mnie bralo...jest duzo trudniej ale za to dziala.

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