Ich habe einen C# -Server und einen C++ - Client. Der C# -Server funktioniert einwandfrei, da ich ihn mit einem C# -Client getestet habe und alle Nachrichten vom Client ordnungsgemäß auf den Server übertragen wurden. Bei der Implementierung des C++ - Clients treten jedoch einige Probleme auf.Benannte Pipe-Kommunikation zwischen C# -Server und C++ - Client
Zunächst einmal, das ist meine C# Server:
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());
}
});
Die name
Variablen als Parameter an die Methode übergeben werden. My C++ Code ist folgende:
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);
}
Die Ausgabe des Servers ist die folgende:
[PIPE] Client connected
[PIPE]
Wer jeden Vorschlag bekam? Vielleicht mache ich das alles falsch, da ich bei Pfeifen total neu bin.
Vielen Dank im Voraus.
Haben Sie versucht, die Dateipuffer zu leeren, bevor Sie das Handle auf der C++ - Seite schließen? https://msdn.microsoft.com/en-us/library/windows/desktop/aa364439(v=vs.85).aspx –
Ich habe FlushFileBuffers (hPipe) nach dem Aufruf von WriteFile() aber immer noch nichts hinzugefügt. – Roel