zoukankan      html  css  js  c++  java
  • [转]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

  • 相关阅读:
    gearman管理
    php运行方式
    gearman mysql持久化
    gearman安装及初次使用
    消息队列各种比较
    IOC
    post提交/文件上传服务器修改
    protobuf php
    thrift 安装介绍
    qt中使用opencv处理图片 QImage 和 IplImage 相互之间转换问题
  • 原文地址:https://www.cnblogs.com/luohengstudy/p/3592063.html
Copyright © 2011-2022 走看看