C/C++ 进程通讯(命名管道)的实例
服务端代码:
//pipe_server.cpp:定义控制台应用程序的入口点。 // #include"stdafx.h" #include#include #include intmain(intargc,_TCHAR*argv[]) { srand(time(NULL)); charbuf[256]=""; DWORDrlen=0; HANDLEhPipe=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("CreatePipeError(%d)\n",GetLastError()); } else { printf("WaitingForClientConnection...\n"); if(!ConnectNamedPipe(hPipe,NULL))//阻塞等待客户端连接。 { printf("Connectionfailed!\n"); } else { printf("ConnectionSuccess!\n"); } while(true) { if(!ReadFile(hPipe,buf,256,&rlen,NULL))//接受客户端发送过来的内容 { printf("ReadDataFromPipeFailed!\n"); break; } else { printf("FromClient:data=%s,size=%d\n",buf,rlen); charwbuf[256]=""; sprintf(wbuf,"%s%d",wbuf,rand()%1000); DWORDwlen=0; WriteFile(hPipe,wbuf,sizeof(wbuf),&wlen,0);//向客户端发送内容 printf("ToClient:data=%s,size=%d\n",wbuf,wlen); Sleep(1000); } } FlushFileBuffers(hPipe); DisconnectNamedPipe(hPipe); CloseHandle(hPipe);//关闭管道 } system("pause"); return0; }
客户端代码:
//pipe_client.cpp:定义控制台应用程序的入口点。 // #include"stdafx.h" #include#include #include intmain(intargc,_TCHAR*argv[]) { srand(time(NULL)); DWORDwlen=0; Sleep(1000);//等待pipe的创建成功! BOOLbRet=WaitNamedPipe(TEXT("\\\\.\\Pipe\\mypipe"),NMPWAIT_WAIT_FOREVER); if(!bRet) { printf("connectthenamedPipefailed!\n"); return0; } HANDLEhPipe=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("opentheexitpipefailed!\n"); } else { while(true) { charbuf[256]=""; sprintf(buf,"%s%d",buf,rand()%1000); if(WriteFile(hPipe,buf,sizeof(buf),&wlen,0)==FALSE)//向服务器发送内容 { printf("writetopipefailed!\n"); break; } else { printf("ToServer:data=%s,size=%d\n",buf,wlen); charrbuf[256]=""; DWORDrlen=0; ReadFile(hPipe,rbuf,sizeof(rbuf),&rlen,0);//接受服务发送过来的内容 printf("FromServer:data=%s,size=%d\n",rbuf,rlen); } Sleep(1000); } CloseHandle(hPipe);//关闭管道 } system("pause"); return0; }
以上这篇C/C++进程通讯(命名管道)的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。