zoukankan      html  css  js  c++  java
  • C# 命名管道

    命名管道作用:方便程序跨进程通讯;

    使用pipeList工具可查询系统中所有命名管道

    https://docs.microsoft.com/zh-cn/sysinternals/downloads/pipelist

    C#实现代码如下:

        public partial class Form1 : Form
        {
            // 命名管道客户端
            NamedPipeClientStream pipeClient = null;
            StreamWriter swClient = null;
            StreamReader srClient = null;
    
            public Form1()
            {
                InitializeComponent();
                Control.CheckForIllegalCrossThreadCalls = false;
            }
    
            // 创建命名管道
            private void button1_Click(object sender, EventArgs e)
            {
                backgroundWorker1.RunWorkerAsync();
                txtInfo.AppendText("创建命名管道" + Environment.NewLine);
            }
    
            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("testPipe", PipeDirection.InOut))
                {
                    pipeServer.WaitForConnection();
    
                    var data = new byte[10240];
                    var count = pipeServer.Read(data, 0, 10240);
                    StreamReader sr = new StreamReader(pipeServer);
                    using (StreamWriter sw = new StreamWriter(pipeServer))
                    {
                        sw.AutoFlush = true;
                        sw.WriteLine("hello " + DateTime.Now.ToString());
                        while (true)
                        {
                            string str = sr.ReadLine();
                            File.AppendAllText(Application.StartupPath + "//log.txt", DateTime.Now.ToLocalTime().ToString() + " " + str + Environment.NewLine);
                            txtInfo.AppendText(str + Environment.NewLine);
                            sw.WriteLine("send to client " + DateTime.Now.ToString());
                            Thread.Sleep(1000);
                        }
                    }
                }
            }
    
            // 连接命名管道
            private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    pipeClient = new NamedPipeClientStream("localhost", "testPipe", PipeDirection.InOut, PipeOptions.Asynchronous, TokenImpersonationLevel.None);
                    pipeClient.Connect(5000);
                    swClient = new StreamWriter(pipeClient);
                    srClient = new StreamReader(pipeClient);
                    swClient.AutoFlush = true;
                    backgroundWorker2.RunWorkerAsync();
    
                    txtInfo.AppendText("连接命名管道" + Environment.NewLine);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("连接建立失败,请确保服务端程序已经被打开。" + ex.ToString());
                }
            }
    
            // 发送消息
            private void button3_Click(object sender, EventArgs e)
            {
                if (swClient != null)
                {
                    swClient.WriteLine(this.textBox1.Text);
                }
                else
                {
                    MessageBox.Show("未建立连接,不能发送消息。");
                }
            }
    
            // 接收消息
            private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
            {
                while (true)
                {
                    if (srClient != null)
                    {
                        txtInfo.AppendText(srClient.ReadLine() + System.Environment.NewLine);
                    }
                }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                // button1.PerformClick();
            }
        }
  • 相关阅读:
    什么?Spring Boot CommandLineRunner 有坑!?
    关于 websocket 跨域的一个奇怪问题…
    电商金额计算的 4 个坑,千万注意了!
    微服务模块划分原则和接口定义原则
    tcp的三次握手(连接)与四次挥手(断开)
    二叉树遍历及算法实现
    elasticsearch搜索 倒排索引
    kubernetes落地-传统web服务迁移
    Docker核心技术-容器管理
    Docker核心技术-镜像管理
  • 原文地址:https://www.cnblogs.com/zjfree/p/11265242.html
Copyright © 2011-2022 走看看