概述
客户端代码:
#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 = %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;
}
登录后复制
服务端代码:
#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 = %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;
}
登录后复制
以上就是命名管道跨进程通讯的详细内容,更多请关注靠谱客其它相关文章!
最后
以上就是追寻电话为你收集整理的命名管道跨进程通讯的全部内容,希望文章能够帮你解决命名管道跨进程通讯所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复