Client server applikacija

Vse kar se tiče programiranja za internet.
Uporabniški avatar
Lee_Nover
Prispevkov: 3653
Pridružen: 20.05.2001 14:31:55

Client server applikacija

Odgovor Napisal/-a Lee_Nover » 04.12.2007 17:01:15

to se tako dela, da najprej posljes nek header, potem pa podatke. enako potem tudi beres, najprej header, potem pa podatke.
npr. (priblizna koda, nima veze z ICS ali katerokoli platformo)

Koda: Izberi vse

TTransferHeader = packed record
  Code: Cardinal;
  Param: Integer;
  DataSize: Cardinal;
end;

...

ReadBytes(LHeader, SizeOf(TTransferHeader));
FDataStream.Read(SourceStream, LHeader.DataSize);
.. my 2 c ..
- I hate noobs -

fora
Prispevkov: 220
Pridružen: 06.08.2003 19:31:22

Client server applikacija

Odgovor Napisal/-a fora » 05.12.2007 11:03:26

Ja hvala, vendar nimam teh težav. Težave imam da se mi stvari ful nelogično kličejo. Problem imam da ne vem kdaj sem zadnji paket dobil, ....
No sej najbrž bo šlo, sej prov velik izbire ni, rad pa bi vprašal, če obstajajo še kakšne komponente za tcp/ip protokol poleg Indy-a in ICS-ja?

gabr
Prispevkov: 4129
Pridružen: 28.08.2001 14:10:47

Client server applikacija

Odgovor Napisal/-a gabr » 05.12.2007 11:27:33

Zadnji paket si dobil, ko zbereš toliko podatkov, kolikor je pisalo v headerju, da je bilo poslanih.

Komponente obstajajo tudi druge, ampak če ti ne ustrezata niti sinhrono orientirani Indy niti asinhroni ICS, je problem najverjetneje pri tebi, ne v komponentah.

Gp

fora
Prispevkov: 220
Pridružen: 06.08.2003 19:31:22

Client server applikacija

Odgovor Napisal/-a fora » 06.12.2007 13:40:22

Čist tko mimogrede, tele (ICS) komponente se nekaj čudno obnašajo. Recimo imam en program, nekej čez prenašam, potem pa na formo vržem samo panel in spet poženem in mi kr javla neke exceptione na Paint, na canvas, v graphics unit-u. Če pa dam button for je pa vse vredu. Potem pa dam grid gor in spet ne dela, ...

Predvidevam da so problem niti. Ima kdo kakšno idejo, kaj bi lahko bilo narobe. S komponentami ne počnem nič, samo kar počne ICS.

gabr
Prispevkov: 4129
Pridružen: 28.08.2001 14:10:47

Client server applikacija

Odgovor Napisal/-a gabr » 06.12.2007 13:44:17

ICS v nitih dela popolnoma lepo. Res pa je, da moraš poskrbeti za črpanje sporočil v nitih sam. In to ne tako, da kličeš Application.ProcessMessages v threadu!

Mislim da je v ICS demotih to čisto lepo demonstrirano.

Sicer pa je ICS čisto uporaben tudi v glavnem threadu. Ker dela asinhrono, ne blokira celega programa.

Gp

fora
Prispevkov: 220
Pridružen: 06.08.2003 19:31:22

Client server applikacija

Odgovor Napisal/-a fora » 06.12.2007 16:20:39

Ja zdej če govoriva o MessageLoop in MessagePump, sem si prebral vso dokumentacijo, problem je v tem da jaz ne uporabljam nobenih niti. Moj vrstni red je nekako takole:
Client se poveže
Client pošlje podatke
Server sprejme podatke
Server glede na sprejete podatke nekaj vrne
Client sprejme podatke
Zaprem aplikacijo in takrat fašem kr neke access violation-e. Če vržem panel dol, use dela. Potem dam gor DBGrid in spet nič ne dela. Če debugiram in se malce sprehajam po kodi (očitno neka zakasnitev) potem mi napake javla že na paint in potem ne morem več naslikati forme. Vsakič ko dam F9, da bi se vrnil v formo zvizne.

Zdej hvala za pomoč, vendar resnično ne vem kaj sem naredil narobe, da se vse skupaj tako čudno onbnaša.

gabr
Prispevkov: 4129
Pridružen: 28.08.2001 14:10:47

Client server applikacija

Odgovor Napisal/-a gabr » 06.12.2007 16:27:46

Jaz vem pa seveda še manj.

Niti si pa sam začel omenjat.

Gp

mspiller
Prispevkov: 247
Pridružen: 08.08.2002 16:43:28

Client server applikacija

Odgovor Napisal/-a mspiller » 07.12.2007 08:06:46

Kaj ce bi ti uporabil mogoce SOAP aka WebService. Ti bo dosti lazje.
Se en tutorial, ki tocno razlozi kako ga naresti link.
Ce ti je SOAP prevelik overhead lahko uporabis XML-RPC (tukaj).
Ce ne drugega vsaj v zacetku uporabi tisto kar je najlazje (npr. SOAP), pa bos potem ko bos ze imel kaj narejeno in bos imel vec znanja prepisal v kako bolj optimalno varianto.

Odgovori