客户端代码:


#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核实处理。

  • 相关标签:通讯 进程 管道
  • 程序员必备接口测试调试工具:点击使用

    Apipost = Postman + Swagger + Mock + Jmeter

    Api设计、调试、文档、自动化测试工具

    网页生成APP,用做网站的技术去做APP:立即创建

    手机网站开发APP、自助封装APP、200+原生模块、2000+映射JS接口按需打包

    • 上一篇:C++ 之 Asio 库
    • 下一篇:.NET中关于接口和类之间的区别介绍

    相关文章

    相关视频


    • c语言中goto语句的含义是什么
    • C/C++深度分析
    • C#中GDI+编程10个基本技巧二
    • 应用绝对路径与相对路径
    • 命名管道跨进程通讯
    • Node.js 多进程
    • 观察mysql进程状态
    • Linux进程管理(1)
    • Linux进程管理(2)
    • 进程和进程边界

    视频教程分类

    • php视频教程
    • html视频教程
    • css视频教程
    • JS视频教程
    • jQuery视频教程
    • mysql视频教程
    • Linux视频教程
    • Python视频教程
    • Laravel视频教程
    • Vue视频教程

    专题

    命名管道跨进程通讯