我是靠谱客的博主 鲜艳世界,最近开发中收集的这篇文章主要介绍一个最简单的C#管道(NamePipe)全双工通信实例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

       命名管道NamedPipe,可以用于进程间通信。本文创建两个exe工程,做为两个进程。一个为管道客户端,一个为管道服务端。互为双向通信。例子摘自MSDN。用控制台或者winForm,启动时,调用对应的函数,并打好断点就可以做测试了。

        首先需要引用命名空间,using System.IO;   using System.IO.Pipes;

        :下面读写用了两种方式。

1)服务端

        a.使用using非托管释放。管道名称是testpipe。而工作方式是双向的InOut。

        b.等待连接时阻塞的,直到客户端连接进来。

        c.pipeServer.Read也是阻塞的,等待接收客户端发送的消息,数据存在data中。

        d.创建一个streamWriter并向客户端发送数据

using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut))
            {
                pipeServer.WaitForConnection();

                var data = new byte[10240];
                var count = pipeServer.Read(data, 0, 10240);

                using (StreamWriter sw = new StreamWriter(pipeServer))
                {
                    sw.AutoFlush = true;
                    sw.WriteLine("send to client");
                }
             }

2)客户端

        a.使用using非托管释放。创建客户端。

        b.连接到服务端,调用Connect的时候,服务端如果有断点可以看到跳转到了waitForConnection下面。

        c.使用pipeClient.Write向服务端发送值,服务端的pipeServer.Read响应。

        d.创建一个StreamReader ,接收服务端发送过来的值。存放在temp中
  using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.InOut))
            {
                pipeClient.Connect();

                using (StreamReader sr = new StreamReader(pipeClient))
                {
                    var data = new byte[10240];
                    data = System.Text.Encoding.Default.GetBytes("send to server");
                    pipeClient.Write(data, 0, data.Length);

                    string temp;
                    while ((temp = sr.ReadLine()) != null) ;
                }
            }

:以上简短的两段程序就实现了C#命名管道在进程间的双向通信,简单易懂。但是要实现完整的容错和自定义通信协议,还是需要做很多的工作。

最后

以上就是鲜艳世界为你收集整理的一个最简单的C#管道(NamePipe)全双工通信实例的全部内容,希望文章能够帮你解决一个最简单的C#管道(NamePipe)全双工通信实例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(93)

评论列表共有 0 条评论

立即
投稿
返回
顶部