簡體   English   中英

阻塞 pipe ConnectNamedPipe 不觸發

[英]Blocking pipe ConnectNamedPipe does not trigger

我想使用命名管道進行 IPC。 這是我試圖在兩個進程之間進行通信的測試客戶端/服務器客戶端代碼:

#include <iostream>
#include <Windows.h>

int main()
{
    HANDLE pipe = CreateFileA("\\\\.\\pipe\\DokiDoki", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
    if (pipe != INVALID_HANDLE_VALUE) {
        char buffer[] = "DokiDoki from the other side :P";
        DWORD bytesWritten;
        WriteFile(pipe, static_cast<LPCVOID>(buffer), sizeof(buffer), &bytesWritten, NULL);
        std::cout << "Done!\n";
        CloseHandle(pipe);
    }
    else {
        std::cout << "Could not get a handle to the pipe!\n";
        return 1;
    }
    return 0;
}

服務器代碼:

#include <iostream>
#include <array>
#include <Windows.h>

int main()
{
    char buffer[1024];
    HANDLE pipe = CreateNamedPipeA("\\\\.\\pipe\\DokiDoki", PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, 1, sizeof(buffer), sizeof(buffer), NMPWAIT_USE_DEFAULT_WAIT, NULL);
    while (pipe != INVALID_HANDLE_VALUE) {
        if (!ConnectNamedPipe(pipe, NULL)) {
         //Setting a breakpoint here will never trigger.
            DWORD bytesRead = 0;    
            while (ReadFile(pipe, static_cast<LPVOID>(buffer), sizeof(buffer) - 1, &bytesRead, NULL)) {
                std::cout << buffer << std::endl;
            }
        }
        DisconnectNamedPipe(pipe);
    }
    return 0;
}

程序在 ConnectNamedPipe 處停止並且不會執行任何其他指令,即使客戶端連接並寫入 pipe 也是如此。 WriteFile(在客戶端)返回 true。

如果成功, ConnectNamedPipe將返回一個非零值,這就是它不起作用的原因。 if (,ConnectNamedPipe(pipe, NULL))更改為if (ConnectNamedPipe(pipe, NULL))似乎工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM