[转]C#中用NamedPipe进程间通信

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

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

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

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

console app为服务器端代码如下

复制代码
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"5125125000false);   
            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代码如下

复制代码
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

原文地址:https://www.cnblogs.com/luohengstudy/p/3592063.html