• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

c++ 搞代码 4年前 (2022-01-06) 23次浏览 已收录 0个评论

下面小编就为大家带来一篇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 = %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; }

客户端代码:

 // 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 = %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<div style="color:transparent">来源gaodai.ma#com搞##代!^码网</div>(hPipe);//关闭管道 } system("pause"); return 0; }

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

以上就是C/C++ 进程通讯(命名管道)的实例的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C/C++ 进程通讯(命名管道)的实例
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址