Vegyület ügyfelek named pipe

Kapcsolódás előtt named pipe, az ügyfélnek kell meghatározni elérhető-e bármely példányának csatorna a kapcsolatot. Ebből a célból az ügyfélnek meg kell hívni a funkciót:

LPCTSTR lpNamedPipeName, // mutató az a csatorna neve

DWORD nTimeOut // intervallum várakozások

amely, ha eredményes visszatér igaz, és meghibásodás esetén - HAMIS. A paraméterei ezt a funkciót a következők.

LpNamedPipeName paramétere egy karakterlánc, amelynek meg kell lennie a forma

itt jelöli a neve a számítógépen fut a named pipe szerver.

NTimeOut paraméter határozza meg azt az időintervallumot, amely alatt az ügyfél vár a kapcsolatot a szerverrel. Ez az időintervallum ezredmásodpercben van megadva, vagy egyenlő lehet az alábbi értékeket:

· NMPWAIT_USE_DEFAULT_WAIT timeout intervallum által meghatározott paraméter értékét nDefaultTimeOut, amely be van állítva CreateNamedPipe funkció

· NMPWAIT_WAIT_FOREVER végtelen várakozási idő miatt a named pipe.

Csináltunk két fontos észrevételt munkájával kapcsolatos WaitNamedPipe funkciót. Először is, ha nincsenek a példányokat egy named pipe nevét lpNamedPipe, ez a funkció nem azonnal, függetlenül a várakozási idő beállítása nTimeOut. Másodszor, ha a fogyasztó csatlakozik egy csatornát a hívás szerver funkció ConnectNamedPipe majd WaitNamedPipe függvény a FALSE és GetLastError függvény a ERROR_PIPE_CONNECTED kódot. Ezért WaitNamedPipe függvényt kell meghívni csak kiszolgáló kapcsolat egy csatornát ConnectNamedPipe funkciót.

Egyszer észlelt szabad csatorna például annak megállapítása érdekében, hogy a kommunikáció csatorna az ügyfélnek kell a függvényt

LPCTSTR lpFileName, // mutató az a csatorna neve

DWORD dwDesiredAccess. // olvasni vagy írni a csatorna

DWORD dwShareMode, // megosztási mód

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // biztonsági attribútumok

DWORD dwCreationDisposition, // csatornanyitási zászló

DWORD dwFlagsAndAttributes, // flags és attribútumok

FOGANTYÚ hTemplateFile // további attribútumok

amely ha sikeres visszatér a kart a named pipe, és meghibásodás esetén - az értéke INVALID_HANDLE_VALUE.

CreateFile funkció paraméterek a következő értékeket, ha ezt a funkciót használják, hogy nyissa meg a named pipe.

LpFileName paramétert kell mutatnia a csatorna nevét, hogy meg kell határozni a formátuma megegyezik a WaitNamedPipe funkciót.

DwDesiredAccess paraméter vehet az alábbi értékeket:

· 0 engedélyek beszerzése csatorna attribútumok,

· GENERIC_READ lehetővé olvasatra Channel,

· GENERIC_WRITE lehetővé teszi belépését a csatorna.

Meg kell jegyezni, hogy a függvény nem CreateFile ha a hozzáférés egy named pipe, ezek előre meghatározott érték nem felel meg a paraméter értékét dwOpenMode CreateNamedPipe funkciót. Ezen túlmenően, ez a lehetőség a programozó határozza meg szabványos hozzáférési jogokat named pipe. További információt erről a kérdésről kell utalni MSDN.

Paraméter dwShareMode megosztási mód meghatározza a named pipe, és megteszi a 0 érték, amely megakadályozza megosztását a named pipe vagy bármilyen kombinációja a következő értékeket:

· FILE_SHARE_READ engedélyezi együttes olvasata a csatorna,

· FILE_SHARE_WRITE engedélyezi közös belépését a csatorna.

LpSecurityAttributes paraméter határozza meg a biztonsági attribútumok egy named pipe.

Csatorna esetében dwCreationDisposition nevű paramétert kell értékével egyenlő OPEN_EXISTING, mivel az ügyfél mindig nyit egy meglévő named pipe.

Egy nevű csatorna dwFlagsAndAttributes paraméter lehet 0, amely meghatározza a zászlókat, és az alapértelmezett attribútumokat. További információt a megadott e paraméter, lásd az MSDN-en.

HTemplateFile paraméter értéke NULL.

Azt, hogy a következő észrevételeket a munkát a CreateFile funkció abban az esetben használja, hogy nyissa meg a hozzáférést egy named pipe. Először is, annak ellenére, hogy WaitNamedPipe funkció sikeresen befejeződött, a következő hívás CreateFile funkció esetleg nem az alábbi okok miatt:

közötti hívások ezeket a funkciókat, a szerver lezárta a csatorna,

közötti funkció kéri egy másik ügyfél kapcsolatba a példány hogy az adott csatorna.

Annak megakadályozása érdekében ez utóbbi esetben a kiszolgáló létre kell hoznia egy új példányt a named pipe minden sikeres befejezése ConnectNamedPipe funkció vagy hozzon létre több példánya named pipe. Másodszor, ha tudjuk, hogy a szerver okozott ConnectNamedPipe funkció CreateFile funkció nélkül hívható előzetes WaitNamedPipe függvényhívás.

Ezenkívül meg kell jegyezni, hogy ha az ügyfél fut ugyanazon a gépen, mint a szerver, és használják, hogy nyissa meg a named pipe-kiszolgáló nevét az CreateFile funkció formájában:

A fájlrendszer megnevezett csövek (NPFS) nyit egy megnevezett cső, amely egy adatfolyam. Megnyitásához named pipe az adat üzenet átviteli módot, meg kell adnia a kiszolgáló nevét a következő formában:

Megjegyzés egyik dolog, ami szerver kommunikáció az ügyfél named pipe. Lehet olyan helyzet, amely miatt ConnectNamedPipe szerver funkciót, és egy ügyfél, aki azt akarja, hogy lépjen kapcsolatba a named pipe nem létezik. Ebben az esetben a szerver alkalmazás le van tiltva. Ahhoz, hogy kezelni egy ilyen helyzetet, ConnectNamedPipe függvényt kell meghívni egy külön téma a szerver alkalmazás. Akkor kinyit a szerver alkalmazás A funkciót az ügyfél miatt named pipe másik szál.