转自: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", 512, 512, 5000, false);   
            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

[转]C#中用NamedPipe进程间通信的更多相关文章

  1. 进程间通信之popen和pclose函数

    常见的操作是创建一个管道连接到另一个进程,然后读其输出或向其输入端发送数据,为此,标准I/O库提供了两个函数popen和pclose.这两个函数实现的操作是:创建一个管道,调用fork产生一个子进程, ...

  2. Windows系统编程之进程间通信

    Windows系统编程之进程间通信作者:北极星2003来源:看雪论坛(www.pediy.com)Windows 的IPC(进程间通信)机制主要是异步管道和命名管道.(至于其他的IPC方式,例如内存映 ...

  3. Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...

  4. Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6629298 在前面一篇文章浅谈Android系 ...

  5. 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...

  6. Linux IPC(Inter-Process Communication,进程间通信)之管道学习

    1.标准流管道 管道操作支持文件流模式,用来创建链接还有一个进程的管道,通过函数popen和pclose popen的详细介绍在本blog:Linux 多进程学习中有具体介绍 2.无名管道(PIPE) ...

  7. 四十九、进程间通信——System V IPC 之消息队列

    49.1 System V IPC 介绍 49.1.1 System V IPC 概述 UNIX 系统存在信号.管道和命名管道等基本进程间通讯机制 System V 引入了三种高级进程间通信机制 消息 ...

  8. linux内核剖析(十一)进程间通信之-共享内存Shared Memory

    共享内存 共享内存是进程间通信中最简单的方式之一. 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区. 共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程 ...

  9. Linux进程间通信机制

    Linux支持管道.信号.unix system V三种IPC(Inter-Process-Communication)机制.以下分别对三种机制加以简单介绍. 一.信号机制: 信号又称作软中断,用来通 ...

随机推荐

  1. [Usaco2005 Dec]Cleaning Shifts

    [Usaco2005 Dec]Cleaning Shifts 给出n段区间,左右端点分别为\(l_i,r_i\),以及选取这段区间的费用\(c_i\),现在要选出若干个区间,使其完全覆盖区间\([m, ...

  2. kaptcha 实现验证码

    依赖 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha< ...

  3. Android中visibility属性

    Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为“visible ”.“invisible”.“gone”.主要用来设置控制控件的显示和隐藏. 1) 可见(visi ...

  4. 从零学React Native之13 持久化存储

    数据持久化就是指应用程序将某些数据存储在手机存储空间中. 借助native存储 这种方式不言而喻,就是把内容传递给native层,通过原生API存储,详见从零学React Native之05混合开发 ...

  5. Hibernate之OID

    在关系数据库中,主键用来识别记录,并保证每天记录的唯一性.在Java语言中,通过比较两个变量所引用对象的内存地址是否相同,或者比较两变量引用的对象是否相等.Hibernate为了解决两者之间的不同,使 ...

  6. cordova开发笔记

    搜狐邮箱APP 使用了cordova框架,遇到了一些列问题,稍微总结记录下 扩展支持appInBrowser,用来以新窗口方式打开外链url 解决跨域问题(cordova默认当前域为localhost ...

  7. QT 获取文件的路径、打开文件的弹出对话框

    1.打开获取文件夹路径的对话框 QString filePath = QFileDialog::getExistingDirectory(this, "请选择文件保存路径...", ...

  8. dashboard服务

    1.上传镜像,并导入,打标签 2.创建dashboard的deployment和service apiVersion: extensions/v1beta1 kind: Deployment meta ...

  9. vue通过修改element-ui相关类的样式修改element-ui组件的样式

    可以在App.vue中的style中修改element-ui的样式. .el-menu{ width:160px !important; } 注意:一定要在属性值后面加上 !important 使自己 ...

  10. 13-5-let和()的作用域

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...