命名管道 msdn 示例错误
本文关键字:错误 msdn 管道 | 更新日期: 2024-10-31 19:39:06
我完全使用了这个样本(除了我在任何地方都将 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_MESSAGE
和 PIPE_READMODE_MESSAGE
),而 C# NamedPipeClientStream
默认使用该PipeTransmissionMode 'Byte'
。
所以把PIPE_TYPE_MESSAGE
改成PIPE_TYPE_BYTE
,PIPE_READMODE_MESSAGE
改成PIPE_READMODE_BYTE
.
有关详细信息,请查看 MSDN 上的此 CreateNamedPipe 函数页,以确保正确设置管道服务器。