首页 后端开发 C#.Net教程 命名管道跨进程通讯

命名管道跨进程通讯

Aug 04, 2017 am 10:06 AM
管道 进程 通讯

客户端代码:


#include "stdafx.h"  
#include <stdio.h>  
#include <windows.h>  
#include <ctime>  
  
int main(int argc, _TCHAR* argv[])  
{  
    srand(time(NULL));  
  
    DWORD wlen = 0;  
    Sleep(1000);//等待pipe的创建成功!  
  
    BOOL bRet = WaitNamedPipe(TEXT("\\\\.\\Pipe\\mypipe"), NMPWAIT_WAIT_FOREVER);  
  
    if (!bRet)  
    {  
        printf("connect the namedPipe failed!\n");  
        return 0;  
    }  
  
    HANDLE hPipe = CreateFile(          //管道属于一种特殊的文件  
        TEXT("\\\\.\\Pipe\\mypipe"),    //创建的文件名  
        GENERIC_READ | GENERIC_WRITE,   //文件模式  
        0,                              //是否共享  
        NULL,                           //指向一个SECURITY_ATTRIBUTES结构的指针  
        OPEN_EXISTING,                  //创建参数  
        FILE_ATTRIBUTE_NORMAL,          //文件属性(隐藏,只读)NORMAL为默认属性  
        NULL);                          //模板创建文件的句柄  
  
    if (INVALID_HANDLE_VALUE == hPipe)  
    {  
        printf("open the exit pipe failed!\n");  
    }  
    else  
    {  
        while(true)  
        {  
            char buf[256] = "";  
            sprintf(buf,"%s%d",buf,rand()%1000);  
            if(WriteFile(hPipe,buf,sizeof(buf),&wlen,0)==FALSE) //向服务器发送内容  
            {  
                printf("write to pipe failed!\n");  
                break;  
            }  
            else  
            {  
                printf("To Server: data = %s, size = %d\n", buf, wlen);  
                char rbuf[256] = "";  
                DWORD rlen = 0;  
                ReadFile(hPipe, rbuf, sizeof(rbuf), &rlen, 0);  //接受服务发送过来的内容  
                printf("From Server: data = %s, size = %d\n", rbuf, rlen);  
            }  
            Sleep(1000);  
        }  
        CloseHandle(hPipe);//关闭管道  
    }  
  
    system("pause");  
    return 0;  
}
登录后复制

服务端代码:


#include "stdafx.h"  
#include <stdio.h>  
#include <windows.h>  
#include <ctime>  
  
int main(int argc, _TCHAR* argv[])  
{  
    srand(time(NULL));  
  
    char buf[256] = "";  
    DWORD rlen = 0;  
    HANDLE hPipe = CreateNamedPipe(  
        TEXT("\\\\.\\Pipe\\mypipe"),                        //管道名  
        PIPE_ACCESS_DUPLEX,                                 //管道类型   
        PIPE_TYPE_MESSAGE|PIPE_READMODE_MESSAGE|PIPE_WAIT,  //管道参数  
        PIPE_UNLIMITED_INSTANCES,                           //管道能创建的最大实例数量  
        0,                                                  //输出缓冲区长度 0表示默认  
        0,                                                  //输入缓冲区长度 0表示默认  
        NMPWAIT_WAIT_FOREVER,                               //超时时间  
        NULL);                                              //指定一个SECURITY_ATTRIBUTES结构,或者传递零值  
  
    if (INVALID_HANDLE_VALUE == hPipe)  
    {  
        printf("Create Pipe Error(%d)\n",GetLastError());  
    }  
    else  
    {  
        printf("Waiting For Client Connection...\n");  
  
        if(!ConnectNamedPipe(hPipe, NULL))  //阻塞等待客户端连接。  
        {  
            printf("Connection failed!\n");  
        }  
        else  
        {  
            printf("Connection Success!\n");  
        }  
  
        while (true)  
        {  
            if(!ReadFile(hPipe,buf,256,&rlen,NULL)) //接受客户端发送过来的内容  
            {             
                printf("Read Data From Pipe Failed!\n");  
                break;  
            }  
            else  
            {  
                printf("From Client: data = %s, size = %d\n", buf, rlen);  
                  
                char wbuf[256] = "";  
                sprintf(wbuf, "%s%d", wbuf, rand()%1000);  
                DWORD wlen = 0;  
                WriteFile(hPipe, wbuf, sizeof(wbuf), &wlen, 0); //向客户端发送内容  
                printf("To Client: data = %s, size = %d\n", wbuf, wlen);  
                Sleep(1000);  
            }  
        }  
        FlushFileBuffers(hPipe);   
        DisconnectNamedPipe(hPipe);   
        CloseHandle(hPipe);//关闭管道  
    }  
  
    system("pause");  
    return 0;  
}
登录后复制

以上是命名管道跨进程通讯的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

解释一下explorer.exe进程是什么 解释一下explorer.exe进程是什么 Feb 18, 2024 pm 12:11 PM

explorer.exe是什么进程在我们使用Windows操作系统的时候,经常会听到一个名词"explorer.exe".那么,你是否好奇这个进程到底是什么?在本文中,我们将详细解释explorer.exe是什么进程以及其功能和作用。首先,explorer.exe是Windows操作系统的一个关键进程,它负责管理和控制Windows资源管理器(Window

请问ccsvchst.exe是哪种进程? 请问ccsvchst.exe是哪种进程? Feb 19, 2024 pm 11:33 PM

ccsvchst.exe是一种常见的进程文件,它是SymantecEndpointProtection(SEP)软件的一部分,而SEP则是一款由著名的网络安全公司Symantec开发的终端保护解决方案。作为该软件的一部分,ccsvchst.exe负责管理和监控SEP的相关进程。首先,我们来了解一下SymantecEndpointProtection(

如何正确杀死Linux中的僵尸进程 如何正确杀死Linux中的僵尸进程 Feb 19, 2024 am 10:40 AM

在Linux系统中,僵尸进程是已经终止但仍保留在系统中的特殊进程。虽然僵尸进程不会消耗太多资源,但如果数量过多,可能会导致系统资源耗尽。本文将介绍如何正确清除僵尸进程,以确保系统的正常运行。1Linux僵尸进程子进程完成任务后,如果父进程没有及时检查状态,子进程将成为僵尸进程。子进程在等待父进程确认,完成后系统才会回收。否则,僵尸进程会继续悬挂在系统中。要检查系统中是否存在僵尸进程,可通过运行命令top来查看所有正在运行的进程及可能存在的僵尸进程。‘top’命令的结果从上图可以看到Linux中进

Linux进程优先级调整方法详解 Linux进程优先级调整方法详解 Mar 15, 2024 am 08:39 AM

Linux进程优先级调整方法详解在Linux系统中,进程的优先级决定了其在系统中的执行顺序和资源分配情况。合理调整进程的优先级可以提高系统的性能和效率。本文将详细介绍Linux中如何调整进程的优先级,并提供具体的代码示例。一、进程优先级概述在Linux系统中,每个进程都有一个与之相关联的优先级。优先级的范围一般是-20到19,其中-20表示最高优先级,19表

如何在 Golang 中使用管道实现文件读写? 如何在 Golang 中使用管道实现文件读写? Jun 04, 2024 am 10:22 AM

通过管道进行文件读写:创建一个管道从文件读取数据并通过管道传递从管道中接收数据并处理将处理后的数据写入文件使用goroutine并发执行这些操作以提高性能

如何在 Windows 11 中停止任务管理器进程更新并更方便地终止任务 如何在 Windows 11 中停止任务管理器进程更新并更方便地终止任务 Aug 20, 2023 am 11:05 AM

如何在Windows11和Windows10中暂停任务管理器进程更新按CTRL+窗口键+删除打开任务管理器。默认情况下,任务管理器将打开“进程”窗口。正如您在此处看到的,所有应用程序都在无休止地移动,当您想要选择它们时,可能很难将它们指向下方。因此,按CTRL并按住它,这将暂停任务管理器。您仍然可以选择应用程序,甚至可以向下滚动,但您必须始终按住CTRL按钮。

为什么Linux中的进程会处于休眠状态? 为什么Linux中的进程会处于休眠状态? Mar 20, 2024 pm 02:09 PM

为什么Linux中的进程会处于休眠状态?在Linux操作系统中,进程可能会处于休眠状态,这是由于多种不同的原因和条件造成的。进程处于休眠状态时,表示该进程暂时被挂起,无法继续执行,直到满足某种条件后才能被唤醒继续执行。接下来将详细介绍在Linux中进程进入休眠状态的几种常见情况,并通过具体的代码示例加以说明。等待I/O完成:当进程发起一个I/O操作(例如读取

Linux系统无PHP进程的检测方法 Linux系统无PHP进程的检测方法 Mar 16, 2024 am 11:42 AM

《Linux系统无PHP进程的检测方法,需要具体代码示例》在使用Linux系统进行Web开发时,经常会依赖PHP进程来处理动态页面和逻辑,而有时候我们可能需要监测服务器上是否存在PHP进程。本文将介绍一种检测Linux系统中是否存在PHP进程的方法,并给出具体的代码示例。为什么需要检测PHP进程在Web开发中,PHP进程扮演着至关重要的角色,它负责解析执行P

See all articles