程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#使用命名管道實現進程間通信

C#使用命名管道實現進程間通信

編輯:C#入門知識

最近做一小程序,其中部分功能用C++,部分功能用C#,兩個程序需要互相調用。而且兩個程序都是帶界面的。以前沒有做過C#和C++的相互調用,雖然知道C#可以調用C++的DLL,但是我對C++創建dll不夠熟悉,而且感覺將此程序中的C++功能做成dll不方便,於是就想將C#和C++做成兩個獨立程序,通過進程通信實現互相調用。

從網上找了一篇命名管道實現進程通信的文章,可以按照這個做,順便把文章轉載一下。

以下為轉載文章。


本文只是一個測試例子,核心代碼是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. 下一頁:
Copyright © 程式師世界 All Rights Reserved