none
同一个电脑上的两个进程通信之间采用命名管道通信,遇到bug,我都快崩溃了,老师们帮帮我吧 RRS feed

  • 问题

  • 进程一端建立命名管道服务器,while监听管道客户端发来的字符串,而客户端管道(同一主机的另一个进程上的)每隔10s发送一个简短的字符串,给服务端。问题出来了:在想当长的一段时间内,可以正常通信,可是之后,客户端进程出现异常:“管道已中断”,并且出现管道已中断的时间是不定的,可能是20分钟,也可能是30分钟。通过排查,测试所在主机的网络通断对这个异常没有必然原因,网络断开,仅仅使这个异常出现的时间提前一些,不会立刻就出现这个异常。再就是每次发送消息都是使用的同一个管道连接,即服务端和客户端都是用的最初建立好的管道,而不是没每隔10s通信的时候,就重新见一个管道连接,为了排除是这个原因导致的错误,我换了个方式,即每隔10s通信都是重新建立管道连接,但是这个问题仍然出现,提示异常为:服务端建立好管道等待连接后,客户端始终连接不上。

    还有人说可能是管道缓存已满的原因,这个我没有验证,我对缓存已满这个概念也不是很理解,请问有没有可能是这个原因,抑或是其它原因?因为这个事好几天没睡好觉了,感觉管道通信真的是不靠谱。希望老师们跟帮忙看下是什么原因?最后要说的是我用c#写的代码。

    wangzhewang
    • 已移动 SplendourGModerator 2010年12月20日 2:37 incorrect language (发件人:Visual C++)
    2010年12月19日 7:43

答案

  • 你好!

        根据你的描述,我推测是由于某些原因,你的管道被意外地销毁了,你可以排查一下相关的问题。你可以用工具监视一下垃圾回收的情况,但是主要还是需要排查代码逻辑。


    周雪峰
    2010年12月23日 13:06
    版主

全部回复

  • 这里是VC++讨论区

    你最好去C#的专区提问

    2010年12月20日 2:19
  • 您的 PipeServer 应该是需要在每次接受一次连接,也就是 BeginAcceptConnection 之后,new 一个 PipeServer 出来,否则,您的问题还可能继续出现。

    注意,当调用完 EndAcceptConnection 方法之后,请注意需要把当前的连接关闭。


    Mark Zhou
    2010年12月20日 7:10
  • 你好 wangzhewang,

    我未能成功实现你所说的问题。

    请问你尝试过mazhou提到的意见了吗?

     


    Mike [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2010年12月23日 6:56
    版主
  • 你好!

        根据你的描述,我推测是由于某些原因,你的管道被意外地销毁了,你可以排查一下相关的问题。你可以用工具监视一下垃圾回收的情况,但是主要还是需要排查代码逻辑。


    周雪峰
    2010年12月23日 13:06
    版主