C#进程通信 - 管道通信

20 篇文章 1 订阅
13 篇文章 0 订阅

语言类型:C#

使用场景:需要使不同进程间可以进行通信

关键代码:


        #region Pipe

        /// <summary> G/S:管道接收端 </summary>
        private NamedPipeServerStream PipeReceiver { get; set; }
        /// <summary> G/S:管道接收事件 </summary>
        private Action<string> OnPipeReceived { get; set; }

        /// <summary>
        /// Void:初始化管道接收端
        /// </summary>
        /// <param name="pipeName">管道名称</param>
        public void InitReceiver(string pipeName)
        {
            this.PipeReceiver = new NamedPipeServerStream(pipeName, PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
            this.PipeReceiver.BeginWaitForConnection(this._OnPipeCallback, this.PipeReceiver);
        }

        /// <summary>
        /// Void:管道回调函数
        /// </summary>
        /// <param name="ar">回调结果</param>
        private void _OnPipeCallback(IAsyncResult ar)
        {
            var _pipe = (NamedPipeServerStream)ar.AsyncState;
            _pipe.EndWaitForConnection(ar);
            var data = new byte[1024];
            var count = _pipe.Read(data, 0, 1024);
            if (count > 0)
            {
                string _message = Encoding.UTF8.GetString(data, 0, count);
                this.OnPipeReceived?.Invoke(_message);
            }
            _pipe.Disconnect();//一定要断开链接
            _pipe.BeginWaitForConnection(this._OnPipeCallback, _pipe);
        }

        /// <summary>
        /// Void:发送信息到指定管道
        /// </summary>
        /// <param name="pipeName">管道名称</param>
        /// <param name="msg">发送的信息</param>
        public void Send(string pipeName, string msg)
        {
            using (var _pipeSender = new NamedPipeClientStream(pipeName))
            {
                _pipeSender.Connect(5000);
                var _bytes = Encoding.UTF8.GetBytes(msg);

                if (_pipeSender.CanWrite)
                {
                    _pipeSender.Write(_bytes, 0, _bytes.Length);
                    _pipeSender.Flush();
                    _pipeSender.Close();
                }
            }
        }

        #endregion

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值