Avatar
Jiří Šedý (jsedy7):

Ahoj,
řeším takový drobný problém. Dělám takový menší prográmek, který funguje jako klient a ten by se měl připojovat ke svým vzdáleným protějškům. Řešil jsem to pomocí TCPListener a TCPClient, jenže zjišťování stavu toho, jestli je počítač v lokální síti dostupný je strašně zdlouhavé. Zvlášť, když potřebuju prozkoumat nějakou škálu IP adres, tak si na to uživatel musí počkat a to je podle mě takový otravný. :) Zkrátil jsem to tak, že nejprve otestuju dostupnost jednotlivých zařízení v síti, který jsou vůbec dostupný (ping) a poté následuje test toho, zda naslouchají. Ale to je děsná věčnost. Než to Nezkoušel někdo nějaký způsob, který by fungoval rychleji? Opravdu mě zatím nenapadá na co se zaměřit, tak abych tento proces mohl urychlit.

Čerpal jsem informace z MSDN, ale zatím nic převratného nemám. Četl jsem zde i nějaké příspěvky s minulosti, jenže taky jsem na nic nepřišel. Tedy ani nic co bych zatím nevyzkoušel :)

Za rady budu rád! :) Předem díky!

Odpovědět 7.4.2015 0:05
Musíš se mnoho učit, abys poznal, že málo víš...
Avatar
vodslon
Člen
Avatar
Odpovídá na Jiří Šedý (jsedy7)
vodslon:

Ahoj,

Jo ten problém znám, ono totiž tam vždy chvilku trvá, než se ten počítač osloví a než vyprší timeout na to, že je nedostupný. Možná to není uplně štastné řešení, ale jde to udělat, že místo toho aby jel třeba 100 adres za sebou zkoušel jednu po druhé, tak si pustit více vláken a na každém tom vláknu se to bude zkoušet pro jeden kus, tím lze časově dosáhnout toho, že 100 počítačů bude trvat jako jeden.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 7.4.2015 8:02
Avatar
Nahoru Odpovědět 8.4.2015 0:15
Musíš se mnoho učit, abys poznal, že málo víš...
Avatar
coells
Redaktor
Avatar
Odpovídá na Jiří Šedý (jsedy7)
coells:

Na lokální síti se to řeší přes UDP broadcast.

Scénář je následující:

  1. klient vyšle [několikrát] všesměrový UDP packet s informací o své adrese
  2. servery naslouchají a pokud zachytí známý UDP packet, odpoví na něj svojí adresou a portem
  3. klient sebere všechny přijaté packety a tím získá seznam serverů

Zatímco TCP zajišťuje spolehlivost, UDP je mnohem jednodušší protokol a nemá žádné timeouty ani dlouhé čekání. Problém je, že musíš sám odhadnout, jak dlouho budeš čekat na odpověď a kolik packetů odešleš. Optimálně bude ale celý scénář trvat milisekundy.

 
Nahoru Odpovědět  +2 8.4.2015 1:05
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 4 zpráv z 4.