C/C++ 进程通讯(命名管道)的实例
发布时间:2020-12-26 00:05:14 所属栏目:经验 来源:网络整理
导读:服务端代码: // 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++ 进程通讯(命名管道)的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读