C ++ сторона
hPipe = CreateFile(TEXT((LPTSTR)"\\\\.\\pipe\\PIPENAME"), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
char buf[100];
DWORD cbWritten;
if ((hPipe == NULL || hPipe == INVALID_HANDLE_VALUE))
{
printf("Could not open the pipe - (error %d)\n", GetLastError());
}
else
{
do
{
printf("Enter your message: ");
scanf_s("%s", buf);
WriteFile(hPipe, buf, (DWORD)strlen(buf), &cbWritten, NULL);
memset(buf, 0xCC, 100);
} while (true);
}
memset(buf, 0xCC, 100);
Теперь я пытаюсь отправить данные в свою программу на c # вот код c #
using (var pipeServer = new NamedPipeServerStream("PIPENAME", PipeDirection.InOut))
{
using (var reader = new StreamReader(pipeServer))
{
using (var writer = new StreamWriter(pipeServer))
{
var running = true;
MessageBox.Show("Server is waiting for a client");
pipeServer.WaitForConnection();
MessageBox.Show("Server: Prompting for Input");
writer.Flush();
while (running)
{
//pipeServer.WaitForPipeDrain();
var message = reader.ReadToEnd();
MessageBox.Show("Received message: " + message);
if (message.Equals("quit"))
{
writer.WriteLine("quit");
running = false;
}
}
}
}
}
Console.WriteLine("Server Quits");
Я также пытался использовать ReadLineно он продолжает читать, пока я не закрою сторону канала c ++
В основном я пытаюсь отправить сообщение со стороны C ++, например "Message1", а сторона c # должна его прочитать.
но, когда я отправляю сообщение «Message1», ничего не происходит, а если я затем отправляю «Message2», то ничего не происходит.но если я закрою программу (сторона cpp), она получит «Message1Message2»