[英]Is it possible to broadcast messages in named pipe between a server and multiple clients?
我是 Windows 中管道和進程間通信的新手。 我想使用命名管道在進程之間進行通信。 但在我的情況下,我應該向多個客戶端發送消息,所以我想檢查是否可以在命名管道通信中發送廣播消息。 先感謝您。
這個命名管道客戶端將每秒廣播 40 條消息,一條消息將被連接到同一管道的多個服務器之一接收。
命名管道客戶端
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 客戶端使用它來廣播消息。
命名管道服務器
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.