命名管道跨进程通信实例2(转)

本文详细介绍了如何使用C#编程语言通过命名管道实现服务端和客户端之间的通信。包括服务端创建管道、接收连接、读取和写入数据的过程,以及客户端连接管道并发送数据的方法。展示了命名管道作为基于TCP/IP的连接方式,端口号为445,并强调了序列化的重要性以传输复杂数据类型。

原文:http://www.cnblogs.com/jonneydong/archive/2012/03/02/2418743.html

服务端代码:

//创建服务端,管道实例
NamedPipeServerStream serverStream = new NamedPipeServerStream("test2PIPE",
    PipeDirection.InOut,
    1,
    PipeTransmissionMode.Message,
    PipeOptions.Asynchronous);
private void Form1_Load(object sender, EventArgs e)
{
    //启用线程接收消息
    ThreadPool.QueueUserWorkItem(delegate
    {
        serverStream.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
                {
                    listBox1.Items.Add(clientName + ":" + result);
                });
            }
        }, serverStream);
    });

}

客户端代码:

        //创建客户端连接实例
        NamedPipeClientStream clientStream = new NamedPipeClientStream("127.0.0.1",
            "test2PIPE",
            PipeDirection.InOut, PipeOptions.Asynchronous,
            System.Security.Principal.TokenImpersonationLevel.None
            );
        StreamWriter sw = null;
        private void Form1_Load(object sender, EventArgs e)
        {
            //连接管道
            clientStream.Connect();
            sw = new StreamWriter(clientStream);
            sw.AutoFlush = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //向管道中写入内容
            sw.WriteLine(richTextBox1.Text);
        }

显示结果:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值