【发布时间】:2015-04-22 03:01:51
【问题描述】:
我一直在使用命名管道进行进程间通信。到目前为止,只要消息不再作为管道缓冲区(1024 字节),这工作得很好。
我实际上认为任何管道都能够告诉它包含的当前数据长度。显然只能寻找。这很好,但是为什么读取太多字节时 NamedPipeClientStream 会抛出 ArgumentException 呢?
如果 Stream 没有 Length 属性(抛出 NotImplementedException),我应该如何知道可以读取多少字节?
这是我的客户端代码。它应该像对流的任何其他缓冲读取操作一样:
// Create message
PipeMessage message = PipeMessage.CreateIncomingMessage((byte) firstByte);
byte[] buffer = new byte[client.InBufferSize];
int bytesRead, offset = 0;
try
{
while ((bytesRead = client.Read(buffer, offset, buffer.Length)) > 0)
{
message.Append(buffer, bytesRead);
offset += bytesRead;
}
}
catch (Exception ex)
{
Log("[ERROR] Reading message failed: " + ex.Message + ex.StackTrace, _clientLogger);
}
如何读取超过输入缓冲区大小的消息?还是我需要浪费资源并设置一个非常大的缓冲区,只是因为?
我通常会收到不大于 ~50-500 字节的消息。但有些更长(记录消息)。
我该如何处理?
【问题讨论】:
标签: c# stream named-pipes