Я новичок в каналах и межпроцессном взаимодействии в Windows. Я хочу использовать именованный канал для связи между процессами. Но в моем случае я должен отправить сообщение нескольким клиентам, поэтому я хочу проверить, можно ли отправлять широковещательные сообщения в именованном канале связи. Заранее спасибо.
Можно ли транслировать сообщения в именованном канале между сервером и несколькими клиентами?
Ответы (1)
Этот клиент namedpipe будет транслировать 40 сообщений, одно сообщение в секунду, которое будет получено одним из нескольких серверов, подключенных к одному и тому же каналу.
Клиент NamedPipe
std::wcout << L"I am broadcasting messages!\n";
TCHAR chReadBuf[_MAX_PATH] = { 0 };
LPTSTR lpszWrite= TEXT("Default message from client");
DWORD cbRead = 0;
TCHAR szTempFolderPath[_MAX_PATH] = { 0 };
TCHAR aTempFileName[_MAX_PATH] = { 0 };
for (int i=0; i<40;i++)
{
std::wcout<< lpszWrite << std::endl;
CallNamedPipe(L"\\\\.\\pipe\\my_pipe", lpszWrite, (lstrlen(lpszWrite) + 1) * sizeof(TCHAR), chReadBuf, (_MAX_PATH * _MAX_PATH) * sizeof(TCHAR), &cbRead, NMPWAIT_WAIT_FOREVER);
Sleep(1000);
}
Создайте несколько серверов namedpipe, каждый сервер использует один и тот же канал, который используется клиентом namedpipe для широковещательной рассылки сообщений.
Сервер NamedPipe
HANDLE m_hPipe = nullptr;
m_hPipe = CreateNamedPipe(L"\\\\.\\pipe\\my_pipe", PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_WAIT, PIPE_UNLIMITED_INSTANCES, MAX_PATH * MAX_PATH, MAX_PATH * MAX_PATH, 100000, NULL);
do {
HRESULT hr = S_OK;
TCHAR chReadBuf[MAX_PATH * MAX_PATH];
BOOL fSuccess = FALSE;
DWORD cbRead;
ConnectNamedPipe(m_hPipe, NULL);
fSuccess = ReadFile(
m_hPipe, // pipe handle
chReadBuf, // buffer to receive reply
(MAX_PATH * MAX_PATH) * sizeof(TCHAR), // size of buffer
&cbRead, // number of bytes read
NULL); // not overlapped
chReadBuf[cbRead] = '\0';
std::wcout <<L"Received by Server 1" << chReadBuf << std::endl;
DisconnectPipe();
} while (1);
- Обратите внимание, что все ваши серверы должны использовать то же имя канала, что и в приведенном выше коде \\.\pipe\my_pipe
- Широковещательное сообщение будет получено только одним сервером за раз из нескольких серверов.
person
Swapnil Kulkarni
schedule
09.11.2020