. 11.1 , . , .
. 11.2. , ( ) , ( ) .
11.1. : ,
CreateFile CallNamedPipe TransactNamedPipe | CreateNamedPipe | |
\\.\ ( ) \\ \ ( ) | \\.\ ( ) |
11.2. : ,
CreateFile | CreateMailslot | |
\\.\ ( ) \\ \ ( ) \\*\ ( , ) | \\.\ ( ) |
: ,
11.4 , ( 11.3), , . , , . 11.3.
- . , , , , ( ). , , .
11.4. SrvrBcst:
static DWORD WINAPI ServerBroadcast(LPLONG pNull) {
MS_MESSAGE MsNotify;
DWORD nXfer;
HANDLE hMsFile;
/* ""*/
while (!ShutDown) { /* , . */
/* , . */
Sleep(CS_TIMEOUT);
hMsFile = CreateFile(MS_CLTNAME, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN EXISTING, FILE ATTRIBUTE NORMAL, NULL);
if (hMsFile == INVALID_HANDLE_VALUE) continue;
/* . */
|
|
MsNotify.msStatus = 0;
MsNotify.msUtilization = 0;
_tcscpy(MsNotify.msName, SERVER_PIPE);
if (WriteFile(hMsFile, &MsNotify, MSM_SIZE, &nXfer, NULL)) ReportError(_T(" ."), 13, TRUE);
CloseHandle(hMsFile);
}
_tprintf(_T(" .\n"));
_endthreadex(0);
return 0;
}
11.5 , (. 11.2) .
11.5. LocSrvr:
/* 11. LocSrver.c */
/* , . */
#include "EvryThng.h"
#include "ClntSrvr.h" /* . */
BOOL LocateServer(LPTSTR pPipeName) {
HANDLE MsFile;
MS_MESSAGE ServerMsg;
BOOL Found = FALSE;
DWORD cbRead;
MsFile = CreateMailslot(MS_SRVNAME, 0, CS_TIMEOUT, NULL);
while (!Found) {
_tprintf(_T(" .\n"));
Found = ReadFile(MsFile, &ServerMsg, MSM_SIZE, &cbRead, NULL);
}
_tprintf(_T(" .\n"));
CloseHandle(MsFile);
/* . */
_tcscpy(pPipeName, ServerMsg.msName);
return TRUE;
}