#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("\\.\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(hPipe);//关闭管道 } system("pause"); return 0; }
服务端代码:
#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("\\.\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; }总结
以上是内存溢出为你收集整理的命名管道跨进程通讯全部内容,希望文章能够帮你解决命名管道跨进程通讯所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)