У меня есть сервер 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 –
Я добавил FlushFileBuffers (hPipe) после вызова WriteFile(), но все равно ничего. – Roel