Diskuze: Tcp - ukončení servru

C# .NET .NET (C# a Visual Basic) Tcp - ukončení servru American English version English version

Avatar
Martin Bruna
Člen
Avatar
Martin Bruna:

Ahoj,
V objektu TcpClient mam spojení se servrem, ale když server ukonči svou činnost, tak nejsem schopen tuto změnu zaznamenat na klientovy proměnná connected je stále true, až do okamžiku, kdy se pokusím odeslat data, poté vyskočí vyjímka a ve stejnou chvíli se teprve ta proměnná změní na false.
Nevíte o nějakém jiném způsobu jak zjistit ukončení spojení? Využívat zachytávání vyjímek se mi moc nechce vzhledem k výkonu. Předem děkuji za pomoc.

 
Odpovědět 9.4.2014 20:44
Avatar
Odpovídá na Martin Bruna
Luboš Běhounek (Satik):

Ze serveru si musíš při ukončování poslat zprávu, podle který poznáš, že máš klienta odpojit.

Nahoru Odpovědět  +1 9.4.2014 21:01
:)
Avatar
Martin Bruna
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
Martin Bruna:

Díky, ale tohle řeší jen půlku mého problému. Co když server spadne nebo se nějak přeruší spojení.

 
Nahoru Odpovědět 9.4.2014 21:04
Avatar
Odpovídá na Martin Bruna
Luboš Běhounek (Satik):

Nezbývá ti než třeba každých třeba 5 sekund to spojení kontrolovat a pokud do dalších 5 sekund neodpoví, tak spadl - odpojit.

Editováno 9.4.2014 23:33
Nahoru Odpovědět 9.4.2014 23:33
:)
Avatar
Odpovídá na Martin Bruna
Michal Žůrek (misaz):

servery by ale neměly moc často padat a když k tomu dojde, prostě nastane nějaká chyba. Však to je jedno, spadlý server ti v aplikaci nijak nepomůže.

Nahoru Odpovědět 10.4.2014 6:48
Nesnáším {}, proto se jim vyhýbám.
Avatar
Honza
Člen
Avatar
Odpovídá na Martin Bruna
Honza:

Ahoj,

jak už zde bylo řečeno výše, pokud server bude ukončovat spojení, měl by o tom informovat klienty kteří na to adekvátně zareagují (odpojí se).

To jak budeš zjišťovat zda je server dostupný záleží na povaze aplikace. Buď můžeš v určitých časových intervalech posílat na server něco jako ping a čekat na odpověď s tím že pokud nepříjde, budeš server považovat za nedostupný. A nebo pokud ti stačí s o nedostupnosti serveru dozvědět až ve chvíli kdy posíláš data, hoď to do try-catch bloku (tomu se stejně nevyhneš).

Ono obecně, neboj se ten try-catch blok používat, vliv na výkon to samozřejmě má, ale znatelné to je až ve chvíli kdy ho voláš opravdu hodněkrát během krátké chvíle. Neříkám že by se měl cpát všude, ale obecně bych doporučoval ho používát "za vrátky" tvé aplikace. Tzn. všude tam kde se může cokoli stát vinou někoho jiného (špatné spojení, nefunkční server, poškozený soubor atd.) a ty to nemůžeš nějak ovlivnit.

Nahoru Odpovědět  +1 10.4.2014 9:36
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Martin Bruna
Člen
Avatar
Odpovídá na Honza
Martin Bruna:

Díky, doufal jsem ze to nebudu muset použít ale vypadá to že ano. Jen doufám, že to přece jen neubere moc výkon.

 
Nahoru Odpovědět 10.4.2014 16:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.