加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 创业 > 经验 > 正文

C/C++ 进程通讯(命名管道)的实例

发布时间:2020-12-26 10:28:27 所属栏目:经验 来源:网络整理
导读:服务端代码: // pipe_server.cpp : 定义控制台应用程序的入口点。// #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 = C

服务端代码:

// pipe_server.cpp : 定义控制台应用程序的入口点。
//
 
#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("\.Pipemypipe"),//管道名
     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 = %dn",rlen);
         
         char wbuf[256] = "";
         sprintf(wbuf,"%s%d",wbuf,rand()%1000);
         DWORD wlen = 0;
         WriteFile(hPipe,sizeof(wbuf),&wlen,0);  //向客户端发送内容
         printf("To Client: data = %s,wlen);
         Sleep(1000);
       }
     }
     FlushFileBuffers(hPipe);
     DisconnectNamedPipe(hPipe);
     CloseHandle(hPipe);//关闭管道
   }
 
  system("pause");
   return 0;
}

客户端代码:

// pipe_client.cpp : 定义控制台应用程序的入口点。
//
 
#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("\.Pipemypipe"),NMPWAIT_WAIT_FOREVER);
 
  if (!bRet)
   {
     printf("connect the namedPipe failed!n");
     return 0;
   }
 
  HANDLE hPipe = CreateFile(      //管道属于一种特殊的文件
     TEXT("\.Pipemypipe"),//创建的文件名
     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,rand()%1000);
       if(WriteFile(hPipe,sizeof(buf),0)==FALSE)  //向服务器发送内容
       {
         printf("write to pipe failed!n");
         break;
       }
       else
       {
         printf("To Server: data = %s,wlen);
         char rbuf[256] = "";
         DWORD rlen = 0;
         ReadFile(hPipe,rbuf,sizeof(rbuf),0);  //接受服务发送过来的内容
         printf("From Server: data = %s,rlen);
       }
       Sleep(1000);
     }
     CloseHandle(hPipe);//关闭管道
   }
 
  system("pause");
   return 0;
}

以上这篇C/C++ 进程通讯(命名管道)的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读