管道未正确读取数据

Pipe not reading data correctly

C++ 端

hPipe = CreateFile(TEXT((LPTSTR)"\\.\pipe\PIPENAME"), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
char buf[100];
DWORD cbWritten;

if ((hPipe == NULL || hPipe == INVALID_HANDLE_VALUE))
{
    printf("Could not open the pipe  - (error %d)\n", GetLastError());

}
else
{
    do
    {
        printf("Enter your message: ");
        scanf_s("%s", buf);
        WriteFile(hPipe, buf, (DWORD)strlen(buf), &cbWritten, NULL);
        memset(buf, 0xCC, 100);


    } while (true);
}
memset(buf, 0xCC, 100);

这就是我尝试将数据发送到我的 c# 程序的方面 这是 C# 代码

 using (var pipeServer = new NamedPipeServerStream("PIPENAME", PipeDirection.InOut))
        {
            using (var reader = new StreamReader(pipeServer))
            {
                using (var writer = new StreamWriter(pipeServer))
                {
                    var running = true;
                    MessageBox.Show("Server is waiting for a client");
                    pipeServer.WaitForConnection();
                    MessageBox.Show("Server: Prompting for Input");
                    writer.Flush();
                    while (running)
                    {
                        //pipeServer.WaitForPipeDrain();
                        var message = reader.ReadToEnd();
                        MessageBox.Show("Received message: " + message);
                        if (message.Equals("quit"))
                        {
                            writer.WriteLine("quit");
                            running = false;
                        }
                    }
                }
            }
        }
        Console.WriteLine("Server Quits");

我也尝试过使用 ReadLine,但它一直在读取,直到我关闭 C++ 管道端

基本上我正在尝试从 C++ 端发送消息,例如 "Message1" 而 c# 端必须读取它。

但是当我发送消息 "Message1" 时 atm 没有任何反应,如果我随后发送 "Message2" 也没有任何反应。但如果我关闭程序(cpp 端),它将收到 "Message1Message2"

ReadLine() 正在寻找 end-of-line 字符序列,或流的结尾,在 returns.

之前

当您的 C++ 代码退出时,管道关闭,因此您会看到 ReadLine return。但是对于单独的消息,您发送的不是 end-of-line 序列。

scanf() 函数系列引用 s type specifier

String, up to first white-space character (space, tab or newline).

即。您发送的数据中不包含任何输入 end-of-line。