send.cpp的内容如下:
#include <Windows.h>
#include <iostream>
int main()
{
// 创建一个命名的文件映射句柄
HANDLE hMapping = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, 0x100, "COMMUNICATION");
if (hMapping == NULL)
{
std::cout << "创建文件映像对象失败" << std::endl;
return 0;
}
// 将文件映射句柄关联到进程的地址空间上
LPSTR StrData = (LPSTR)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (StrData == NULL)
{
std::cout << "文件映射失败" << std::endl;
return 0;
}
// 向映射内存写数据
do
{
std::cout << "请输入内容: ";
std::cin >> StrData;
} while (strcmp(StrData, "exit") != 0);
//释放映像内存
UnmapViewOfFile(StrData);
std::cout << "press any key to exit." << std::endl;
std::cin.get();
return 0;
}
recv.cpp的内容如下:
#include <iostream>
#include <Windows.h>
int main()
{
HANDLE hMapping = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "COMMUNICATION");
if (hMapping == NULL)
{
std::cout << "打开文件映像对象失败" << std::endl;
std::cin.get();
return 0;
}
LPSTR StrData = (LPSTR)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if (StrData == NULL)
{
std::cout << "文件映射失败" << std::endl;
std::cin.get();
return 0;
}
//获取映像内存的数据量
std::cout << "等待接收数据..." << std::endl;
while (true)
{
if (strlen(StrData) == 0)
{
Sleep(1);
continue;
}
std::cout << "recv data: " << StrData << std::endl;
StrData[0] = '\0';
}
//释放映像内存
UnmapViewOfFile(StrData);
std::cout << "press any key to exit." << std::endl;
std::cin.get();
return 0;
}