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#端必须阅读它。
但是在atm上,当我发送消息“ Message1”时,什么也没有发生,如果我再发送“ Message2”,则也无任何反应。但是如果我关闭程序(在cpp端),它将收到“ Message1Message2”
答案 0 :(得分:3)
ReadLine()
在返回之前寻找行尾字符序列或流的结尾。
退出C ++代码时,管道关闭,因此您看到ReadLine
返回。但是对于单个消息,您没有发送行尾序列。
请参考scanf()
系列功能的s
type specifier:
字符串,最多第一个空格字符(空格,制表符或换行符)。
即。您发送的数据中不包含任何输入的行尾。