服务端
// Pipe_Test.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<Windows.h>
#include<stdio.h>
#include<ctime>
#include<iostream>
#pragma warning(disable:4996)
int main()
{
srand(time(NULL));
char buf[256];
DWORD rlen = 0;
float * dataT = new float[4];
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) == NULL) //阻塞等待客户端连接。
{
printf("Connection failed!\n");
}
else
{
printf("Connection Success!\n");
}
while (true)
{
if (ReadFile(hPipe, dataT, 4*sizeof(dataT), &rlen, NULL) == FALSE) //接受客户端发送过来的内容
{
printf("Read Data From Pipe Failed!\n");
break;
}
else
{
//printf("From Client: data = %d, size = %d\n", buf, rlen);
std::cout << "接受到的数据" << dataT[2]<<std::endl;
char wbuf[256];
//sprintf(wbuf, "%s%d", wbuf, rand() % 1000);
float* some_data = new float[4];
some_data[0] = 0.0;
some_data[1] = 1.0;
some_data[2] = 2.0;
some_data[3] = 3.0;
DWORD wlen = 0;
//WriteFile(hPipe, wbuf, sizeof(wbuf), &wlen, 0); //向客户端发送内容
WriteFile(hPipe, some_data, 4*sizeof(some_data), &wlen, 0); //向客户端发送内容
//printf("To Client: data = %s, size = %d\n", wbuf, wlen);
//std::cout << some_data[2]<<std::flush;
Sleep(1000);
delete(some_data);
}
}
CloseHandle(hPipe);//关闭管道
}
delete(dataT);
system("PAUSE");
return 0;
return 0;
}
客户端
// Pipe_C.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <ctime>
#include <iostream>
#pragma warning(disable:4996)
int main()
{
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);
float * data_a = new float[4];
data_a[0] = 9;
data_a[1] = 8;
data_a[2] = 7;
data_a[3] = 6;
if (WriteFile(hPipe, data_a, 4*sizeof(data_a), &wlen, 0) == FALSE) //向服务器发送内容
{
printf("write to pipe failed!\n");
break;
}
else
{
delete(data_a);
//printf("To Server: data = %f, size = %d\n", buf, wlen);
float * dataT = new float[4];
DWORD rlen = 0;
ReadFile(hPipe, dataT, 4*sizeof(dataT), &rlen, 0); //接受服务发送过来的内容
std::cout << "接受到的数据为" << dataT[2] << std::endl;;
//printf("From Server: data = %s, size = %d\n", rbuf, rlen);
//std::cout << dataT[3] << std::flush;
delete(dataT);
}
Sleep(1000);
}
CloseHandle(hPipe);//关闭管道
}
system("PAUSE");
return 0;
return 0;
}