当前位置:主页   - 电脑 - 程序设计 - C#
C#中用NamedPipe进程间通信
来源:网络   作者:   更新时间:2012-02-06
收藏此页】    【字号    】    【打印】    【关闭

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

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

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

C#中用NamedPipe进程间通信

  console app为服务器端代码如下

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

  客户端的aspx代码如下

usingSystem;  
usingSystem.Web;  
usingAppModule.InterProcessComm;  
usingAppModule.NamedPipes;  
publicpartialclass_Default:System.Web.UI.Page  
{  
  protectedvoidPage_Load(objectsender,EventArgse)  
  {  
    Response.Write(SendRequest("测试asdf"));  
  }  
  ///<summary>  
  ///测试namepiped客户端  
  ///</summary>  
  ///<paramname="request">发送命令</param>  
  ///<returns>返回数据</returns>  
  stringSendRequest(stringrequest)  
  {  
    stringresponse="";  
    IInterProcessConnectionclientConnection=null;  
    try 
    {  
      clientConnection=newClientPipeConnection("np-test-by-jinjazz",".");  
      clientConnection.Connect();  
      clientConnection.Write(request);  
      response=clientConnection.Read();  
      clientConnection.Close();  
    }  
    catch(Exceptionex)  
    {  
      clientConnection.Dispose();  
      response=ex.Message;  
    }  
    returnresponse;  
  }  
} 

  测试环境为windows vista和windows2003

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明