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();
            }
        }
  • 相关阅读:
    Jenkins+gitlab自动化构建部署
    浅尝CI/CD,真香
    各种奇葩,我感觉我快窒息了,来吐吐槽...
    用SMART原则来创建一个好的OKR
    用OKR改变个人能力得不到明显提升的困境
    承诺型与愿景型,什么样的OKR适合你?
    OKR文化:关键成果必须具备的五个特点
    为什么不能完全用OKR替代KPI?
    OKR的激励方式应该注意什么?
    OKR如何与绩效考核并行?
  • 原文地址:https://www.cnblogs.com/zjfree/p/11265242.html
Copyright © 2011-2022 走看看