IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Programovanie služieb vo Windows - Klient / server - 6. diel

Ukážka programu Klient - Server na báze Pipes

V predchádzajúcich článkoch, kde som ukázal ako programovať Service vo Windows 7/8, som bol zameraný na prenos pomocou IP protokolu. V tejto ukážke sa pokúsim ukázať ako sa rieši komunikácie pomocou Pipes.

Prehľad funkcií API Pipe (rúr)

Tieto funkcie nám umožňujú vykonávať komunikáciu medzi procesmi. Vo Windows je k dispozícii niekoľko funkcií Pipe a to:

  • CallNamedPipe (....) - Táto funkcia sa pripája k rúre typu správy, čaká, či je dostupná inštancia rúry, zapisuje do rúry, číta z nej a potom ju uzavrie.
  • ConnectNamedPipe (....) - Funkcia umožňuje procesu pomenované rúry na serveri čakať, než sa proces klienta pripojí k inštancii pomenované rúry. Proces klienta sa pripája volaním CreateFile (...) alebo CallNamedPipe (....).
  • CreateNamedPipe (....) - Vytvorí inštanciu pomenované rúry a vracia Handle pre ďalšie operácie. Proces pomenované rúry na serveri používa túto funkciu k vytvoreniu prvej inštancie určité pomenované rúry a stanovuje jej základné atribúty, alebo k vytvoreniu novej inštancie už existujúce pomenované rúry.
  • CreatePipe (...) - Vytvorí nepomenovanou rúru a vracia Handle pre čítanie a zápis.
  • DisconnectNamed­Pipe (...) - odpojí stranu servera od inštancie pomenované rúry procesu klienta.
  • GetNamedPipeHan­dleState (...) - Vyhľadá informácie o určitej pomenované rúre. Vrátené informácie sa mení podľa doby života a inštancie pomenované rúry.
  • GetNamedPipeInfo (...) - Vyhľadáva informácie o špecifikované pomenované rúre.
  • PeekNamedPipe (...) - Vykonáva kópiu dát z pomenované alebo nepomenované rúry do vyrovnávacej pamäte, bez toho, aby dáta z rúry odstránila. Vracia informáciu o dátach v rúre.
  • SetNamedPipeHan­dleState (...) - Nastavuje režim čítanie a blokovanie a tiež blokovacie režim u danej pomenované rúry. Ak daný Handle prislúcha ku klientovej strane rúry a keď je proces servera na vzdialenom počítači, funkciu možno tiež použiť na riadenie lokálneho vyrovnanie.
  • TransactNamedPipe (...) - Kombinuje do jednej sieťovej operácie funkcie zápisu a čítania z danej pomenované rúry.
  • WaitNamedPipe (...) - Čaká, kým neuplynie interval časové oneskorenia alebo ak nie je k spojeniu dostupná inštancia pomenované rúry. To znamená, že proces rúry na serveri má v rúre čakajúce operáciu ConnectNamedPipe (...).

Komunikácia Client-Server pomocou rúr (Pipes)

Server bude vytvorený ako pomenovaná rúra pomocou prekrývajúceho I / O. Jedná sa o jednovláknovou server, ktorý využíva prekrývajúce sa operácie pre pripojenie viac klientov.

Kanál servera vytvorí pevný daný počet inštancií. Každá inštancia sa môže pripojiť k samostatnému klientovi. Ak sa klient odpojí, je jeho inštancia použitá a pripravená pre ďalšieho klienta. Uvedená ukážka je len demo, server by nemal mať viditeľné okno, mal by byť spustený vo vlastnom vlákne pracujúcim na pozadí a všetky správy smerované do prehliadača udalostí.

Pomenovaný kanál klienta používa CreateFile, tá otvára popisovač k pojmenovanému kanálu. Ak pipe kanál existuje a je prekročený počet pripojení, vracia funkcia INVALID_HANDLE_VA­LUE a GetLastError () vracia ERROR_PIPE_BUSY. Ak táto situácia nastane a pomenovaný kanál klient používa, potom funkcia WaitNamedPipe () čaká až inštancie pomenovaného kanálu bude k dispozícii.

Ukážka súčasného pripojenie štyroch klientov, piaty klient čaká až niektorý z klientov sa odpojí.

Klient Server pripojenie - C # - Pre pokročilých

Server je odpojený alebo nepracuje.

nepracuje server - C # - Pre pokročilých

Dôležité

U funkcie CreateNamedPipe (LPCTSTR lpName, ...) lpName ukazuje na reťazec ukončený nulovým znakom, ktorý jednoznačne určuje rúru. Môže obsahovať ľubovoľné znaky vrátane čísel a špeciálnych znakov mimo spätného lomky. Reťazec môže byť dlhý až 255 znakov. Nie je citlivý na malé a veľké písmená.
Musí mať tvar \\. \ Pipe \ pipename.

Použité API funkcie

  • struct OVERLAPPED - Táto štruktúra je požadovaná pre asynchrónny I / O operácie. Ak je operácia otvorená s príznakom FILE_FLAG_OVER­LAPPED, handle je asynchrónny, inak je handle synchrónne.
  • WaitForMultiple­Objects (...) je wait funkcia, ktorá končí iba vtedy, ak sú jeden alebo všetky uvedené objekty signalisované alebo dôjde k danému time-out.
  • GetOverlapped­Result (...) vracia výsledok prekrývajúce sa operácie na špecifikovanom súboru, rúre s menom alebo komunikačným zariadením.
  • CreateEvent (...) vytvorí objekt udalosťou, ktorá môže byť programovo nastavená do signalisovaného alebo nesignalisovaného stave.

V ukážke sú zdrojové texty vytvorené vo Visual Studiu 2013.

Dúfam, že sa bude ukážka páčiť.


Galéria


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 97x (827.6 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
C # - Pre pokročilých
Program pre vás napísal zpavlu
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
C# , C++ a assembler
Aktivity