C#服务器和C+之间的命名管道通信+;客户 我有一个C++服务器和一个C++客户端。C#服务器工作正常,因为我使用C#客户端对其进行了测试,所有来自客户端的消息都正确地传输到了服务器。但是,在实现C++客户端时,我似乎遇到了一些问题。

C#服务器和C+之间的命名管道通信+;客户 我有一个C++服务器和一个C++客户端。C#服务器工作正常,因为我使用C#客户端对其进行了测试,所有来自客户端的消息都正确地传输到了服务器。但是,在实现C++客户端时,我似乎遇到了一些问题。,c#,c++,named-pipes,C#,C++,Named Pipes,首先,这是我的C#服务器: name变量作为参数传递给方法。 我的C++代码如下: HANDLE hPipe; DWORD dwWritten; hPipe = CreateFile(TEXT("\\\\.\\pipe\\testpipe"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if

首先,这是我的C#服务器:

name
变量作为参数传递给方法。 我的C++代码如下:

HANDLE hPipe;
    DWORD dwWritten;

    hPipe = CreateFile(TEXT("\\\\.\\pipe\\testpipe"),
        GENERIC_READ | GENERIC_WRITE,
        0,
        NULL,
        OPEN_EXISTING,
        0,
        NULL);
    if (hPipe != INVALID_HANDLE_VALUE)
    {
        WriteFile(hPipe,
            "Hello Pipe\n",
            12,   // = length of string + terminating '\0' !!!
            &dwWritten,
            NULL);

        CloseHandle(hPipe);
    }
[PIPE] Client connected
[PIPE] 
服务器的输出如下所示:

HANDLE hPipe;
    DWORD dwWritten;

    hPipe = CreateFile(TEXT("\\\\.\\pipe\\testpipe"),
        GENERIC_READ | GENERIC_WRITE,
        0,
        NULL,
        OPEN_EXISTING,
        0,
        NULL);
    if (hPipe != INVALID_HANDLE_VALUE)
    {
        WriteFile(hPipe,
            "Hello Pipe\n",
            12,   // = length of string + terminating '\0' !!!
            &dwWritten,
            NULL);

        CloseHandle(hPipe);
    }
[PIPE] Client connected
[PIPE] 
有人有什么建议吗?也许我完全错了,因为我对管道完全陌生


提前感谢。

如果没有可靠地再现问题的良好工具,很难诊断代码,尤其是网络代码。但服务器的C#代码至少有一个明显的问题:

while (true)
{
    if (reader.ReadLine() != null)
        Console.WriteLine(reader.ReadLine());
}
在这里,首先从流中读取一行,然后如果它不是
null
,则读取另一行并显示该行。这意味着您将丢弃正在发送的每一行

循环应该看起来更像这样:

string line;

while ((line = reader.ReadLine()) != null)
{
    Console.WriteLine(line);
}

我不明白你的客户是怎么工作的。也可能是错误地实现,在空白行之前用空白行来平衡服务器代码中的错误。

您是否在关闭C++侧的句柄之前尝试刷新文件缓冲区?我在调用WriteFile()后添加了FlushFileBuffers(hPipe),但仍然没有添加任何内容。这实际上解决了整个问题。我在Codeproject的某个地方找到了C#代码,并假设它工作正常。非常感谢。