命名管道 msdn 示例错误

Named pipes msdn sample faulty?

本文关键字:错误 msdn 管道      更新时间:2023-10-16

我完全使用了这个样本(除了我在任何地方都将 tchar 更改为 char): https://msdn.microsoft.com/en-us/library/windows/desktop/aa365601%28v=vs.85%29.aspx

我使用以下 c# 代码将中型 (=400kb) 文件发送到 c++ 服务器:

var client = new NamedPipeClientStream(@"SamplePipe");
client.Connect();
StreamWriter writer = new StreamWriter(client);
string bla = File.ReadAllText(@"D:Request.txt");
writer.Write(bla);

这是我发送的文件: http://www.gutenberg.org/cache/epub/45745/pg45745.txt

从未发送过这段话以外的数据:"我们站得像一个高个子一样高,从喙到尾巴有四英尺。星期四"(大约 170kb 的 400kb)(我不明白"你的"从何而来,下一个词是"那里")

我所知,发生的最后一件事是WAIT_IO_COMPLETION,然后它永远停留在writer.Write(bla)线上。但这可能是间接的。这是怎么回事?我也尝试了其他一些示例,它们似乎都存在较大文件的问题。

好的,

我想我想通了:

C++示例将PipeTransmissionMode设置为 'Message'PIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE),而 C# NamedPipeClientStream默认使用该PipeTransmissionMode 'Byte'

所以把PIPE_TYPE_MESSAGE改成PIPE_TYPE_BYTEPIPE_READMODE_MESSAGE改成PIPE_READMODE_BYTE.

有关详细信息,请查看 MSDN 上的此 CreateNamedPipe 函数页,以确保正确设置管道服务器。