我有一個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