C#中用NamedPipe进程间通信

2/4/2009来源:C#应用人气:8241

本文只是一个测试例子,核心代码是kernel32.dll中的一组windows api函数,这里不深入研究,代码都在codePRoject上。

http://www.codeproject.com/KB/threads/dotnetnamedpipespart1.aspx

测试效果如下,可以做到aspx和给console app发送消息后得到反馈:

console app为服务器端代码如下

view plaincopy to clipboardprint?
using System;  
using AppModule.InterProcessComm;  
using AppModule.NamedPipes;  
using System.Threading;  
namespace Server  
{  
    class Program  
    {  
        //**c#中用namedpipe进程间通信  
        //**组件代码来自codeproject  
        //**http://www.codeproject.com/KB/threads/dotnetnamedpipespart1.aspx   
        //**下载上面链接中的代码,编译AppModule.InterProcessComm和AppModule.NamedPipes两个dll  
        //**引用这两个dll到本例中,运行如下代码作为服务器端测试  
        //**测试代码by jinjazz(因为原作者的两个测试程序比较复杂,这里简化后供大家参考)  
        static void Main(string[] args)  
        {  
            ServerPipeConnection PipeConnection = new ServerPipeConnection("np-test-by-jinjazz", 512, 512, 5000, false);  
            Console.WriteLine("listening..");  
            while (true)  
            {  
                try 
                {  
                    PipeConnection.Disconnect();  
                    PipeConnection.Connect();  
                    string request = PipeConnection.Read();  
                    if (!string.IsNullOrEmpty(request))  
                    {  
                        Console.WriteLine("get:" + request);  
                        PipeConnection.Write("get:" + request);  
                        if (request.ToLower() == "break") break;  
                    }  
                }  
                catch (Exception ex)  
                {  
                    Console.WriteLine(ex.Message);  
                    break;  
                }  
            }  
            PipeConnection.Dispose();  
            Console.Write("press any key to exit..");  
            Console.Read();  
        }  
    }  

using System;
using AppModule.InterProcessComm;
using AppModule.NamedPipes;
using System.Threading;
namespace Server
{
    class Program
    {
        //**c#中用namedpipe进程间通信
        //**组件代码来自codeproject
        //**http://www.codeproject.com/KB/threads/dotnetnamedpipespart1.aspx
        //**下载上面链接中的代码,编译AppModule.InterProcessComm和AppModule.NamedPipes两个dll
        //**引用这两个dll到本例中,运行如下代码作为服务器端测试
        //**测试代码by jinjazz(因为原作者的两个测试程序比较复杂,这里简化后供大家参考)
        static void Main(string[] args)
        {
            ServerPipeConnection PipeConnection = new ServerPipeConnection("np-test-by-jinjazz", 512, 512, 5000, false);
            Console.WriteLine("listening..");
            while (true)
            {
                try
                {
                    PipeConnection.Disconnect();
                    PipeConnection.Connect();
                    string request = PipeConnection.Read();
                    if (!string.IsNullOrEmpty(request))
                    {
                        Console.WriteLine("get:" + request);
                        PipeConnection.Write("get:" + request);
                        if (request.ToLower() == "break") break;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    break;
                }
            }
            PipeConnection.Dispose();
            Console.Write("press any key to exit..");
            Console.Read();
        }
    }
}
 

 

客户端的aspx代码如下

view plaincopy to clipboardprint?
using System;  
using System.Web;  
using AppModule.InterProcessComm;  
using AppModule.NamedPipes;  
public partial class _Default : System.Web.UI.Page   
{  
    protected void Page_Load(object sender, EventArgs e)  
    {  
        Response.Write(SendRequest("测试asdf"));  
    }  
    /// <summary>  
    /// 测试namepiped客户端  
    /// </summary>  
    /// <param name="request">发送命令</param>  
    /// <returns>返回数据</returns>  
    string SendRequest(string request)  
    {  
        string response="";  
        IInterProcessConnection clientConnection = null;  
        try 
        {  
            clientConnection = new ClientPipeConnection("np-test-by-jinjazz", ".");  
            clientConnection.Connect();  
            clientConnection.Write(request);  
            response=clientConnection.Read();  
            clientConnection.Close();  
        }  
        catch (Exception ex)  
        {  
            clientConnection.Dispose();  
            response = ex.Message;  
        }  
        return response;  
    }  

using System;
using System.Web;
using AppModule.InterProcessComm;
using AppModule.NamedPipes;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(SendRequest("测试asdf"));
    }
    /// <summary>
    /// 测试namepiped客户端
    /// </summary>
    /// <param name="request">发送命令</param>
    /// <returns>返回数据</returns>
    string SendRequest(string request)
    {
        string response="";
        IInterProcessConnection clientConnection = null;
        try
        {
            clientConnection = new ClientPipeConnection("np-test-by-jinjazz", ".");
            clientConnection.Connect();
            clientConnection.Write(request);
            response=clientConnection.Read();
            clientConnection.Close();
        }
        catch (Exception ex)
        {
            clientConnection.Dispose();
            response = ex.Message;
        }
        return response;
    }
}
 

 

测试环境为windows Vista和windows2003

http://blog.csdn.net/jinjazz/archive/2009/02/03/3861143.aspx