私はC#サーバとC++クライアントを持っています。私はC#クライアントでそれをテストし、クライアントからのすべてのメッセージが正しくサーバーに転送されたので、C#サーバーはうまく動作します。しかし、C++クライアントを実装するとき、私は特定の問題に遭遇しているようです。C#サーバとC++クライアント間の名前付きパイプ通信
まず第一に、これは私のC#のサーバーである:
Task.Factory.StartNew(() =>
{
NamedPipeServerStream server = new NamedPipeServerStream(name);
server.WaitForConnection();
StreamReader reader = new StreamReader(server);
Console.WriteLine("Client connected");
while (true)
{
if (reader.ReadLine() != null)
Console.WriteLine(reader.ReadLine());
}
});
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]
誰でもどんな提案を得ましたか。おそらく、私はパイプで全く新しいので、これはすべて間違っています。
ありがとうございます。
C++側でハンドルを閉じる前にファイルバッファをフラッシュしましたか? https://msdn.microsoft.com/en-us/library/windows/desktop/aa364439(v=vs.85).aspx –
WriteFile()を呼び出してもFlushFileBuffers(hPipe)を追加しましたが、何も表示されません。 – Roel