1.创建邮槽 服务器
// InterProcess_Communication_MAILSLOT_SERVER.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <locale.h>
#include <iostream>
using namespace std;
#define SLOT_NAME L"\\\\.\\mailslot\\my_slot"
int _tmain(int argc, _TCHAR* argv[])
{
//设置中文环境
setlocale(LC_ALL,"chs");
//邮槽的格式 \\.\mailslot\\myslot
//参见MSDN 说明https://msdn.microsoft.com/en-us/library/windows/desktop/aa365147(v=vs.85).aspx
HANDLE hSlot = CreateMailslot(
SLOT_NAME,
0,
MAILSLOT_WAIT_FOREVER,
NULL
);
if(hSlot == INVALID_HANDLE_VALUE)
{
wcout<<L"CreateMailslot failed!\n";
return 0;
}
else
wcout << L"CreateMailslot success!\n";
DWORD dwMsgCount = 0,dwMsgSize = 0;
while(true)
{
GetMailslotInfo(hSlot,
NULL,
&dwMsgSize,
&dwMsgCount,
NULL
);
if(dwMsgSize == MAILSLOT_NO_MESSAGE)
{
Sleep(2000);
continue;
}
while(dwMsgCount)
{
WCHAR* lpBuffer;
lpBuffer =(WCHAR*) new CHAR[dwMsgSize + 2];
DWORD dwRet;
memset((CHAR*)lpBuffer,0,dwMsgSize + 2);
if(!ReadFile(hSlot,lpBuffer,dwMsgSize + 2,&dwRet,NULL))
{
wcout << L"READFILE函数执行失败\n";
delete[] lpBuffer;
return 0;
}
wcout << lpBuffer<<endl;
GetMailslotInfo(hSlot,(LPDWORD)NULL,&dwMsgSize,&dwMsgCount,NULL);
delete[] lpBuffer;
}
}
return 0;
}
2.创建右键客户端
// InterProcess_Communication_MAILSLOT_CLIENT.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <locale.h>
#include <iostream>
using namespace std;
#define SLOT_NAME L"\\\\.\\mailslot\\my_slot"
#define MESSAGE_MAX_SIZE 1024*4
int _tmain(int argc,_TCHAR* argv[])
{
setlocale(LC_ALL,"chs");
HANDLE hFile = CreateFile(
SLOT_NAME,
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(hFile == INVALID_HANDLE_VALUE)
{
wcout << L"获取邮槽服务器失败,请确认服务器已经开启!" << endl;
return 0;
}
wcout << L"连接到邮槽服务器,请输入发送数据!" << endl;
while(true)
{
DWORD dwWritten;
WCHAR lpMessage[MESSAGE_MAX_SIZE] = {0};
wcin.getline(lpMessage,MESSAGE_MAX_SIZE);
DWORD dwMegLen = wcslen(lpMessage) * sizeof(TCHAR);
if(WriteFile(hFile,lpMessage,dwMegLen,&dwWritten,NULL))
wcout<<L"已经向邮槽写入信息!\n";
else
wcout << L"向邮槽写入信息失败!\n";
Sleep(1000);
}
CloseHandle(hFile);
return 0;
}
实验截图