命名管道到底是全双工还是半双工?

alextsln 2014-01-08 06:21:52
如题,请教一下,我看很多文章上说的,匿名管道是单工模式,命名管道是全双工模式。
但是我读阻塞之后,就不能写了,这种应该是半双工吧?想socket那种读阻塞不影响写才是全双工,还是我哪里写错了?

示例代码如下:
using System.IO.Pipes;
using System.IO;

static void Main(string[] args)
{
NamedPipeServerStream pipeServer = new NamedPipeServerStream(PIPENAME, PipeDirection.InOut, maxInstrances);
new Thread(delegate()
{
pipeServer.WaitForConnection();
StreamReader sr = new StreamReader(_pipeServer, Encoding.ASCII);
StreamWriter sw = new StreamWriter(_pipeServer, Encoding.ASCII);
new Thread(delegate()
{
while (true)
{
string str = sr.ReadLine();
//处理客户端传递数据 balabalabala
}
}).Start();

_sw.WriteLine("HB");
_sw.Flush();

}).Start();

Console.ReadLine();
}
程序如果先在sr.ReadLine();阻塞住了的话,_sw.Flush();也会阻塞住...
...全文
9292 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuddje_M 2014-05-08
  • 打赏
  • 举报
回复
你好,我也碰到了这个问题,楼主现在弄清楚Windows命名管道是全双工的吗? 我使用CreateNamedPipe()创建了一个命名管道,等待对端的连接 对端连接以后,在对端创建一个读线程,阻塞读。然后对端中再向该管道写入数据,可是写数据的WriteFile()也被阻塞
feiyun0112 2014-01-09
  • 打赏
  • 举报
回复
和通道什么的都没关系,是StreamReader.ReadLine会阻塞知道有数据到

*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
alextsln 2014-01-08
  • 打赏
  • 举报
回复
我知道用异步读写可以互不阻塞,但我想要的效果是在阻塞模式下的双向数据传说,我记得socket就可以做到的。
本拉灯 2014-01-08
  • 打赏
  • 举报
回复
你那种是阻塞模式的就是你说的什么半双工吧 你要是全双工的话就用 m_Pipe.BeginRead(m_RecvBuffer, 0, m_RecvBuffer.Length, m_OnReceive, m_Pipe); m_Pipe.BeginWrite() lastPipeStream.BeginWaitForConnection(m_OnAccept, lastPipeStream); 这些方法。就互不影响了
sinodzh 2014-01-08
  • 打赏
  • 举报
回复
配置文件。wcf的

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧