C# 利用 命名管道 进行 进程间通讯

 

最近在做一个数据库同步软件.!!

程序 服务端为 一个winform + windows Service 二大模块.!

由于程序功能的需求. 需要winform 与windows Service进程通讯. 因此使用了 命名管道 来实现功能需求.!

 

以此记下笔记 , 并付上一Demo

有关 NamedPipeServerStream 类 官方MSDN文档说明

复制代码
NamedPipeServerStream pipeServer = new  NamedPipeServerStream("testpipe", PipeDirection.InOut,  PipeTransmissionMode.Message, PipeOptions.Asynchronous); 
void Form1_Load(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(delegate
{
pipeServer.BeginWaitForConnection((o) =>;
{
NamedPipeServerStream server = (NamedPipeServerStream)o.AsyncState;
server.EndWaitForConnection(o);
StreamReader sr = new StreamReader(server);
StreamWriter sw = new StreamWriter(server);
string result = null;
string clientName = server.GetImpersonationUserName();
while (true)
{
result = sr.ReadLine();
if (result == null || result == "bye")
break;
this.Invoke((MethodInvoker)delegate { lsbMsg.Items.Add(clientName+" : "+result); });
}
}, pipeServer);
});
}
复制代码




有关 NamedPipeClientStream 类 官方MSDN文档说明

复制代码
View Code
 1 NamedPipeClientStream pipeClient = new NamedPipeClientStream("192.168.1.100", "testpipe",  PipeDirection.InOut, PipeOptions.Asynchronous,  TokenImpersonationLevel.None); StreamWriter sw = null; 
2 void Form2_Load(object sender, EventArgs e)
3 {
4 pipeClient.Connect();
5 sw = new StreamWriter(pipeClient);
6 sw.AutoFlush = true;
7 }
8 private void button1_Click_1(object sender, EventArgs e)
9 {
10 sw.WriteLine(textBox1.Text);
11 }
复制代码



复制代码

 

经发现,命名管道, 其实是基于TCP/IP 来连接. 且端口为 445

 

当然, 我这里只是 传输一个字符串做为信息而已.! 其实仍然 可以传输自己所定义的 对象 等.(记得序列化哟..)

源码

复制代码
posted @   董侨  阅读(10455)  评论(3编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示