C#中使用命名管道进行进程通信的实例
2022/7/13 5:21:23
本文主要是介绍C#中使用命名管道进行进程通信的实例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 新建解决方案NamedPipeExample
在解决方案下面新建两个项目:Client和Server,两者的输出类型均为“Windows 应用程序”。整个程序的结构如下图所示。
2 实现项目Client
Client仅包含一个名为“客户端”的窗体,如下图所示。
编写窗体后端代码,如下所示。
using System; using System.IO; using System.IO.Pipes; using System.Security.Principal; using System.Windows.Forms; namespace Client { public partial class frmClient : Form { NamedPipeClientStream pipeClient = new NamedPipeClientStream("localhost", "testpipe", PipeDirection.InOut, PipeOptions.Asynchronous, TokenImpersonationLevel.None); StreamWriter sw = null; public frmClient() { InitializeComponent(); } private void frmClient_Load(object sender, EventArgs e) { try { pipeClient.Connect(5000); sw = new StreamWriter(pipeClient); sw.AutoFlush = true; } catch (Exception ex) { MessageBox.Show("连接建立失败,请确保服务端程序已经被打开。"); this.Close(); } } private void btnSend_Click(object sender, EventArgs e) { if (sw != null) { sw.WriteLine(this.txtMessage.Text); } else { MessageBox.Show("未建立连接,不能发送消息。"); } } } }
3 实现项目Server
Server项目仅包含一个名为“服务端”的窗体,如下图所示。
编写窗体后端代码,如下所示。
using System; using System.IO; using System.IO.Pipes; using System.Threading; using System.Windows.Forms; namespace Server { public partial class frmServer : Form { NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut,1,PipeTransmissionMode.Message,PipeOptions.Asynchronous); public frmServer() { InitializeComponent(); } private void frmServer_Load(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(delegate { pipeServer.BeginWaitForConnection((o) => { NamedPipeServerStream pServer = (NamedPipeServerStream)o.AsyncState; pServer.EndWaitForConnection(o); StreamReader sr = new StreamReader(pServer); while (true) { this.Invoke((MethodInvoker)delegate { lsvMessage.Items.Add(sr.ReadLine()); }); } }, pipeServer); }); } } }
4 运行程序
运行Server.exe与Client.exe程序,效果如下图所示。
实例中共发送三次消息,分别传递数据1,2,3。
本例中演示的客户端和服务端程序均位于本地机器,使用命名管道可以与网络上的其他进程进行通信。
这篇关于C#中使用命名管道进行进程通信的实例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具