这个Blog很强大

导航

C#中用NamedPipe进程间通信

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

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

 

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

console app为服务器端代码如下

 

  1. using System;   
  2. using AppModule.InterProcessComm;   
  3. using AppModule.NamedPipes;   
  4. using System.Threading;   
  5. namespace Server   
  6. {   
  7.     class Program   
  8.     {   
  9.         //**c#中用namedpipe进程间通信   
  10.         //**组件代码来自codeproject   
  11.         //**http://www.codeproject.com/KB/threads/dotnetnamedpipespart1.aspx    
  12.         //**下载上面链接中的代码,编译AppModule.InterProcessComm和AppModule.NamedPipes两个dll   
  13.         //**引用这两个dll到本例中,运行如下代码作为服务器端测试   
  14.         //**测试代码by jinjazz(因为原作者的两个测试程序比较复杂,这里简化后供大家参考)   
  15.         static void Main(string[] args)   
  16.         {   
  17.             ServerPipeConnection PipeConnection = new ServerPipeConnection("np-test-by-jinjazz", 512, 512, 5000, false);   
  18.             Console.WriteLine("listening..");   
  19.             while (true)   
  20.             {   
  21.                 try  
  22.                 {   
  23.                     PipeConnection.Disconnect();   
  24.                     PipeConnection.Connect();   
  25.                     string request = PipeConnection.Read();   
  26.                     if (!string.IsNullOrEmpty(request))   
  27.                     {   
  28.                         Console.WriteLine("get:" + request);   
  29.                         PipeConnection.Write("get:" + request);   
  30.                         if (request.ToLower() == "break"break;   
  31.                     }   
  32.                 }   
  33.                 catch (Exception ex)   
  34.                 {   
  35.                     Console.WriteLine(ex.Message);   
  36.                     break;   
  37.                 }   
  38.             }   
  39.             PipeConnection.Dispose();   
  40.             Console.Write("press any key to exit..");   
  41.             Console.Read();   
  42.         }   
  43.     }   
  44. }  

 

 

客户端的aspx代码如下

 

  1. using System;   
  2. using System.Web;   
  3. using AppModule.InterProcessComm;   
  4. using AppModule.NamedPipes;   
  5. public partial class _Default : System.Web.UI.Page    
  6. {   
  7.     protected void Page_Load(object sender, EventArgs e)   
  8.     {   
  9.         Response.Write(SendRequest("测试asdf"));   
  10.     }   
  11.     /// <summary>   
  12.     /// 测试namepiped客户端   
  13.     /// </summary>   
  14.     /// <param name="request">发送命令</param>   
  15.     /// <returns>返回数据</returns>   
  16.     string SendRequest(string request)   
  17.     {   
  18.         string response="";   
  19.         IInterProcessConnection clientConnection = null;   
  20.         try  
  21.         {   
  22.             clientConnection = new ClientPipeConnection("np-test-by-jinjazz"".");   
  23.             clientConnection.Connect();   
  24.             clientConnection.Write(request);   
  25.             response=clientConnection.Read();   
  26.             clientConnection.Close();   
  27.         }   
  28.         catch (Exception ex)   
  29.         {   
  30.             clientConnection.Dispose();   
  31.             response = ex.Message;   
  32.         }   
  33.         return response;   
  34.     }   
  35. }  

 

 

测试环境为windows vista和windows2003

 

posted on 2009-02-04 14:54  这个Blog很强大  阅读(2105)  评论(0编辑  收藏  举报