栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

服务端代码:

// pipe_server.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
#include 
#include 
#include 
 
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 = %dn", 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 = %dn", wbuf, wlen);
  Sleep(1000);
}
     }
     FlushFileBuffers(hPipe);
     DisconnectNamedPipe(hPipe);
     CloseHandle(hPipe);//关闭管道
   }
 
  system("pause");
   return 0;
}

客户端代码:

// pipe_client.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
#include 
#include 
#include 
 
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 = %dn", buf, wlen);
  char rbuf[256] = "";
  DWORD rlen = 0;
  ReadFile(hPipe, rbuf, sizeof(rbuf), &rlen, 0);  //接受服务发送过来的内容
  printf("From Server: data = %s, size = %dn", rbuf, rlen);
}
Sleep(1000);
     }
     CloseHandle(hPipe);//关闭管道
   }
 
  system("pause");
   return 0;
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/63372.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号