Umíme to s Delphi: 130. díl – serverová aplikace přes sockety od A do Z

Diskuze čtenářů k článku

lukas  |  31. 05. 2004 19:14

Mel bych taky dotaz, jak se da udelat komunikace s klientem kterej je za proxy/routerem (s neverejnou IP) bez port forwardingu ...

Souhlasím  |  Nesouhlasím  |  Odpovědět
Milan M3  |  27. 08. 2004 21:56

Nijak

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jiri  |  31. 05. 2004 19:08

Dobrý den zdravím všechny delfaře

Než sem začal číst tento seriál,nevěděl sem o programování sítovích aplikací a používaní delphi komponent zhola nic,a proto musím panovi Kadlecovi poděkovat,že něco takového píše.Moc mě toto téma zajímá.Ze sposty možných uplatnění co me napadla sem se zatim dostal k jednomu a hned nastal problém.Moje klientská aplikace zobrazuje běžící procesy na servru s možností je ukončovat.Problém je ale vtom že posílám dve správy hned za sebou.V jedné potvrzení požadavku klienta a v druhé samotný seznam aplikací.Klient ale tyto dvě správy přijme v jedné události,vysledek je takový,že přijde jedna spojená.Pokud ovšem nepoužiju sleep na 200ms mesi jednotlivím rozesíláním.Testuju to na lokání soft. smyčce a zajímalo by mě jestli by těch 200ms stačilo i u internetu,podle mého názoru to odesílání muže trvat pokaždý jinak dlouho takže asi ne.Nebo snad existuje jiné řešení?Určitě ano, poradtě mi prosím někdo.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Tomáš Jantač  |  01. 06. 2004 02:54

Pokud tomu dobre rozumim, tak pouzivate TCP spojeni pro prenos nekolika ruznych typu informaci. Samozrejme ze je to mozne, al emusite si na obou stranach vytvorit nejaky konecny automat ktery bude rozpoznavat zpravy a dale na ne reagovat. Reseni nejakymi timeouty neni prilis vhodne.

doporucoval bych vytvorit si na prijimaci strane nejaky buffer do ktereho se budou pripisovat nove prichozi data a pri kazdem zapisu do tohoto bufferu se zkontroluje zda neobsahuje jiz celou zpravu. (je nutne rozpoznat o ktery typ zpravy jde) Pokud je zprava kompletni, musi se predat dale ke zpracovani a smazat z bufferu. Toto je potreba opakovat dokud je v bufferu alespon jedna kompletni zprava.

Tento postup je vhodny pro jakoukoliv sitovou komunikaci. Musite si totiz uvedomit ze jedna zprava vyslana ze serveru Vam  ve zkutecnosti muze prijit rozkouskovna na nekolik dilu a pak by jste zpracovaval jen jednu jeji neuplnou cast. Pri dalsim eventu onRead by jste pak zpracovaval zbytek zpravy coz by jiz nemuselo korespondovat z parsovacim algoritmem a zprava by byla vyhodnocena jako spatna.

Souhlasím  |  Nesouhlasím  |  Odpovědět
Jiri  |  01. 06. 2004 15:52

No myslel sem to tak ze treba v cyklu odeslu 5 sprav za sebou,vím je to asi zbytečné stačí odeslat 1 a tu si potom po přijetí rozkouskovat podle nejakych spec. znaků něco jako start a stop v telegrafu.Ted uz je mi to jasné.díky 

Souhlasím  |  Nesouhlasím  |  Odpovědět
Zasílat názory e-mailem: Zasílat názory Můj názor