Нужно организовать межпроцессорное взаимодействие через именованные каналы. На стороне сервера делается так:
pipeServer = new NamedPipeServerStream(pipeName, PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances);
pipeServer.WaitForConnectionAsync();
...
if (pipeServer.IsConnected) {
// send data.
}
Клиент подключается следующим образом:
hPipe = CreateFile(lpszPipeName,
GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, 0, NULL);
if (hPipe == INVALID_HANDLE_VALUE) {
printf("Pipe open error: %d\n", GetLastError());
EXIT();
}
DWORD dwMode = PIPE_READMODE_BYTE;
if (!SetNamedPipeHandleState(hPipe, &dwMode, NULL, NULL))
{
printf("Set pipe handle state error: %d\n", GetLastError());
EXIT();
}
// read write data.
При переподключении возникает ошибка: 231 ERROR_PIPE_BUSY.
Странно, что после отключения клиента pipeServer.IsConnected имеет значение True, пока сервер не попытается прочитать или отправить данные через канал (там ожидаемое IOException).
Отключаю так:
DisconnectNamedPipe(hPipe);
CloseHandle(hPipe);
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости