C#开发---进程间通信-命名管道

简单的命名管道Demo

客户端:输入 1+1 点击发送,将1+1传给服务端

服务端:进行运算后把结果返回给客户端

下面是核心代码,完整Demo点击这里

client:

private void sendMsgToServer()
        {
            string _name = "sendMsgToServer";
            using (var client = new NamedPipeClientStream(".", m_sPipeName, PipeDirection.InOut))
            {
                try
                {
                    client.Connect(2000);
                    Helper.LogHelper.Log_Info(m_sClassName + _name, "连接服务器成功,管道名称:" + m_sPipeName);
                    using (var pipe = new Helper.PipeStream(client))
                    {
                        Helper.LogHelper.Log_Info(m_sClassName + _name, "开始循环收发消息,管道名称:" + m_sPipeName);
                        while (!m_bClosePipe)
                        {
                            if (m_bSend)
                            {
                                m_bSend = !m_bSend;
                                m_bReceive = !m_bReceive;
                                this.Dispatcher.Invoke(delegate ()
                                {
                                    Helper.MsgModel msg = GetMsg();
                                    if (msg != null)
                                    {
                                        string sendMsg = JsonConvert.SerializeObject(msg);
                                        pipe.Send(sendMsg);
                                        Helper.LogHelper.Log_Info(m_sClassName + _name, "向服务器发消息,管道名称:" + m_sPipeName);
                                    }
                                });
                            }
                            if (m_bReceive)
                            {
                                m_bReceive = !m_bReceive;
                                string receive = pipe.Receive();
                                if (!string.IsNullOrEmpty(receive))
                                {
                                    MessageBox.Show(receive, "接收到来自服务器的消息");
                                    Helper.LogHelper.Log_Info(m_sClassName + _name, "接收到来自服务器的消息,管道名称:" + m_sPipeName);
                                }
                            }
                        }
                        string closeMsg = JsonConvert.SerializeObject(null);
                        pipe.Send(closeMsg);
                        Helper.LogHelper.Log_Info(m_sClassName + _name, "向服务器发送关闭管道消息,管道名称:" + m_sPipeName);
                    }
                    client.Close();
                    Helper.LogHelper.Log_Info(m_sClassName + _name, "客户端管道关闭,管道名称:" + m_sPipeName);
                    MessageBox.Show("客户端当前命名管道已关闭", "客户端");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString(), "客户端");
                    Helper.LogHelper.Log_Error(m_sClassName + _name, "错误:" + ex.Message.ToString());
                }
            }
        }

server:

private void listenClient()
        {
            while (!m_bClose)
            {
                using (m_PipeServer = new NamedPipeServerStream(m_sPipeName, PipeDirection.InOut, m_iMaxNumber))
                {
                    try
                    {
                        m_PipeServer.WaitForConnection();
                        using (m_pipeStream = new Helper.PipeStream(m_PipeServer))
                        {
                            while (true)
                            {
                                string msgJson = m_pipeStream.Receive();
                                if (msgJson != "null")
                                {
                                    Helper.MsgModel msg = JsonConvert.DeserializeObject<Helper.MsgModel>(msgJson);
                                    double number1 = Convert.ToDouble(msg.number1);
                                    double number2 = Convert.ToDouble(msg.number2);
                                    switch (msg.type)
                                    {
                                        case "+":
                                            DoMain_A(number1, number2);
                                            break;
                                        case "-":
                                            DoMain_B(number1, number2);
                                            break;
                                        case "*":
                                            DoMain_C(number1, number2);
                                            break;
                                        case "/":
                                            DoMain_D(number1, number2);
                                            break;
                                    }
                                    m_PipeServer.RunAsClient(SendToClent);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        m_PipeServer.Close();
                        MessageBox.Show("服务器当前命名管道已关闭","服务器");
                    }
                    catch(Exception ex)
                    {
                        MessageBox.Show(ex.Message.ToString(), "服务器");
                    }
                }
            }
        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿呦嘿呦嘿呦嘿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值