如何解决C#管道NamedPipeServerStream / StreamWriter有时会发送具有自定义缓冲区大小的空字符串
当我使用默认的缓冲区大小时,我总是可以成功写入字符串行。当我将缓冲区大小设置为10240时,有时客户端(用node.js代码编写)将收到空消息,而大多数情况下客户端可以接收完整的消息字符串。以下是我的C#代码:
int inBufferSize = 10240;
int outBufferSize = 10240;
using (NamedPipeServerStream pipeServer =
new NamedPipeServerStream(name,PipeDirection.InOut,NamedPipeServerStream.MaxAllowedServerInstances,PipeTransmissionMode.Message,PipeOptions.Asynchronous,inBufferSize,outBufferSize))
{
pipeServer.WaitForConnection();
if (OnNamedPipeServerConnectedByAnyClient != null)
{
OnNamedPipeServerConnectedByAnyClient();
}
StreamReader sr = new StreamReader(pipeServer,System.Text.Encoding.UTF8,false,inBufferSize);
StreamWriter sw = new StreamWriter(pipeServer,outBufferSize);
string strMessage;
while (true)
{
Thread.Sleep(100);
strMessage = sr.ReadLine();
if (String.IsNullOrEmpty(strMessage))
{
break;
}
BaseReceivingMessage baseMessage = JsonConvert.DeserializeObject<BaseReceivingMessage>(strMessage);
switch (baseMessage.Action)
{
case "LIST_APP_WINDOWS":
if (ListAppWindowsFunc != null)
{
_log.Info("PipeServer Received LIST_APP_WINDOWS Message!");
BaseSendingMessage_ListAppWindows baseSendingMessage_ListAppWindows =
ListAppWindowsFunc();
try
{
string line = JsonConvert.SerializeObject(baseSendingMessage_ListAppWindows,_jsonSerializerSettings);
sw.WriteLine(line);
sw.Flush();
}
catch (Exception e)
{
_log.ErrorFormat("LIST_APP_WINDOWS Exception! error: {0},StackTrace: {1}",e.Message,e.StackTrace);
}
}
break;
default:
break;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。