原文:C#中使用命名管道进行进程通信的实例

1 新建解决方案NamedPipeExample

在解决方案下面新建两个项目:Client和Server,两者的输出类型均为“Windows 应用程序”。整个程序的结构如下图所示。

2 实现项目Client

Client仅包含一个名为“客户端”的窗体,如下图所示。

编写窗体后端代码,如下所示。

  1. using System;
  2. using System.IO;
  3. using System.IO.Pipes;
  4. using System.Security.Principal;
  5. using System.Windows.Forms;
  6.  
  7. namespace Client
  8. {
  9. public partial class frmClient : Form
  10. {
  11. NamedPipeClientStream pipeClient =
  12. new NamedPipeClientStream("localhost", "testpipe", PipeDirection.InOut, PipeOptions.Asynchronous, TokenImpersonationLevel.None);
  13. StreamWriter sw = null;
  14.  
  15. public frmClient()
  16. {
  17. InitializeComponent();
  18. }
  19.  
  20. private void frmClient_Load(object sender, EventArgs e)
  21. {
  22. try
  23. {
  24. pipeClient.Connect(5000);
  25. sw = new StreamWriter(pipeClient);
  26. sw.AutoFlush = true;
  27. }
  28. catch (Exception ex)
  29. {
  30. MessageBox.Show("连接建立失败,请确保服务端程序已经被打开。");
  31. this.Close();
  32. }
  33. }
  34.  
  35. private void btnSend_Click(object sender, EventArgs e)
  36. {
  37. if (sw != null)
  38. {
  39. sw.WriteLine(this.txtMessage.Text);
  40. }
  41. else
  42. {
  43. MessageBox.Show("未建立连接,不能发送消息。");
  44. }
  45. }
  46. }
  47. }

3 实现项目Server

Server项目仅包含一个名为“服务端”的窗体,如下图所示。

编写窗体后端代码,如下所示。

  1. using System;
  2. using System.IO;
  3. using System.IO.Pipes;
  4. using System.Threading;
  5. using System.Windows.Forms;
  6.  
  7. namespace Server
  8. {
  9. public partial class frmServer : Form
  10. {
  11. NamedPipeServerStream pipeServer =
  12. new NamedPipeServerStream("testpipe", PipeDirection.InOut,1,PipeTransmissionMode.Message,PipeOptions.Asynchronous);
  13. public frmServer()
  14. {
  15. InitializeComponent();
  16. }
  17.  
  18. private void frmServer_Load(object sender, EventArgs e)
  19. {
  20. ThreadPool.QueueUserWorkItem(delegate
  21. {
  22. pipeServer.BeginWaitForConnection((o) =>
  23. {
  24. NamedPipeServerStream pServer = (NamedPipeServerStream)o.AsyncState;
  25. pServer.EndWaitForConnection(o);
  26. StreamReader sr = new StreamReader(pServer);
  27. while (true)
  28. {
  29. this.Invoke((MethodInvoker)delegate { lsvMessage.Items.Add(sr.ReadLine()); });
  30. }
  31. }, pipeServer);
  32. });
  33. }
  34. }
  35. }

4 运行程序

运行Server.exe与Client.exe程序,效果如下图所示。

实例中共发送三次消息,分别传递数据1,2,3。

本例中演示的客户端和服务端程序均位于本地机器,使用命名管道可以与网络上的其他进程进行通信。

C#中使用命名管道进行进程通信的实例的更多相关文章

  1. C#中使用SendMessage进行进程通信的实例

    原文:C#中使用SendMessage进行进程通信的实例 1 新建解决方案SendMessageSecondExample 在解决方案下面新建两个项目:Sender和Receiver,两者的输出类型均 ...

  2. 【linux】mkfifo 命令创建命名管道实现进程之间通信

    mkfifo 命令 mkfifo命令创建一个FIFO特殊文件,是一个命名管道(可以用来做进程之间通信的桥梁) 管道也是一种文件,一般是linux中的一个页大小,4k,管道数据一旦被读取就没了.(管道大 ...

  3. 【Chromium中文文档】跨进程通信 (IPC)

    跨进程通信 (IPC) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/I ...

  4. 邮槽 匿名管道 命名管道 剪贴板 进程通讯 转自http://www.cnblogs.com/kzloser/archive/2012/11/04/2753367.html#

    邮槽 通信流程: 服务器 客户端 注意: 邮槽是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输 邮槽可以实现一对多的单向通信,我们可以利用这个特点编写一个网络会议通知系统,而且实现这一的系 ...

  5. PHP 中的多进程使用,进程通信、进程信号等详解

    多进程环境要求 Linux 系统 php-cli 模式 pcntl 扩展 或 swoole 扩展 pcntl 扩展 <?php $str = "hello world!" . ...

  6. Android中的跨进程通信方法实例及特点分析(二):ContentProvider

    1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content P ...

  7. Android中的跨进程通信方法实例及特点分析(一):AIDL Service

    转载请注明出处:http://blog.csdn.net/bettarwang/article/details/40947481 近期有一个需求就是往程序中增加大数据的採集点,可是由于我们的Andro ...

  8. winows 进程通信的实例详解

    发送端: 新建一个基本对话框工程,添加6个文本框控件,并且关联控件变量(CString类型):  m_strCopyData, m_strFileMap, m_strMem, m_strRegMsg, ...

  9. 有名管道FIFO进程间数据传输实例

    紧接着上面一个博客的简单介绍,下面进行一个没有血缘关系的进程间通信的实例,实现文件拷贝传输. 有两个进程,一个主要是fifow进程:读文件Makefile内容,写入管道;另一个进程fifor:读管道内 ...

随机推荐

  1. 2014-08-05 再次接触VBA

    今天是在吾索实习的第20天.本来今天的计划是完成BBS的界面的设计的,但是中途发生了一些小插曲,经理要求我帮忙用VBA实现EXCEL中表与表之间的动态联编,而且答应了客户明天就要看到成品了.所以只好放 ...

  2. 简单干净的C# MVC设计案例:BrothersDropdownList()

    团队切换器 在/Teams/Details?id=xxx的页面,有这样一个控件,使得不需要回到/Teams/Index就能轻松切换团队: 由于这种团队切换控件比比皆是,比如在团队故事板中(以及其他地方 ...

  3. java中的“包”与C#中的“命名空间

    原文地址:http://www.cnblogs.com/lidabo/archive/2012/12/15/2819865.html Package vs. Namespace 我们知道,重用性(re ...

  4. Python 2 到 Python 3的变化

    Python 2.x到Python 3.x变化还是挺大的,具体的变化,参考官方文档: https://docs.python.org/3.0/whatsnew/3.0.html

  5. (转)利用ant在Mac 下自动化打包签名Android程序

    1.创建一个android项目 参数说明:-k /--package 为命名空间(包名)-a /--name 工程名-p /--path 项目 -t 为目标平台的版本编号 命令:./android c ...

  6. (转) xcodebuild和xcrun自动化编译ipa包 笔记

    转自:http://blog.csdn.net/totogo2010/article/details/8883100 打包过程 xcodebuild负责将工程源文件编译成xxx.app xcrun负责 ...

  7. windows服务程序

    首先创建一个myService的窗体程序作为服务安装卸载控制器(管理员身份运行vs,windows服务的安装卸载需要管理员权限)   在同一个解决方案里面添加一个windows服务程序,取名myWin ...

  8. Jsp中response对象的所有属性

    所属接口:javax.servlet.http.HttpServletResponse,其父接口是ServletResponse,而且ServletResponse也现在只有唯一一个HttpServl ...

  9. java 截取字符串 拆分字符串

    例如 想要吧"90_python" 分成“90” 和“python” 从网上看到的方法: public class splitTest { public static void m ...

  10. Win2 Socket(套接字)相关 API

    Socket(套接字) 作者信息 肖进 单位:南京中萃食品有限公司 资讯部 邮箱:xiaoj@njb.swirebev.com 电话:025-58642091 与socket有关的一些函数介绍 1.读 ...