windows油槽通信
2018-10-07 本文已影响0人
MagicalGuy
// 10.邮槽-客户端.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
//1.打开邮槽对象
HANDLE hFile = CreateFile(
L"\\\\DESKTOP-NJCBKNB\\mailslot\\sample", // 邮槽名称
GENERIC_WRITE, // 读写属性
FILE_SHARE_READ, // 共享属性
NULL, // 安全属性
OPEN_EXISTING, // 打开方式
FILE_ATTRIBUTE_NORMAL, // 标志位
NULL); // 文件模板(默认留空)
// 2. 向mailslot写入
DWORD dwWritten;
LPSTR lpMessage = "邮槽测试消息!";
DWORD dwMegLen = strlen(lpMessage) + sizeof(CHAR);
WriteFile(hFile, lpMessage, dwMegLen, &dwWritten, NULL);
// 3. 结束
printf("已经向邮槽写入信息!\n");
CloseHandle(hFile);
return 0;
}
==================
// 09.邮槽-服务器.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
int main()
{
HANDLE hMailSlot = CreateMailslot(
L"\\\\.\\mailslot\\sample",// 邮槽名
0,// 无最大消息限制
MAILSLOT_WAIT_FOREVER,// 永不超时
NULL
);
while (true)
{
DWORD dwCount = 0, dwSize = 0;
GetMailslotInfo(
hMailSlot,// 邮槽名
NULL,// 无最大消息限制
&dwSize,// 下一条消息大小
&dwCount,// 消息个数
NULL);// 永不超时
if (dwSize == MAILSLOT_NO_MESSAGE)
{
Sleep(200);// 暂时没有消息
continue;
}
while (dwCount)
{
PBYTE pBuf = new BYTE[dwSize+10]{};
ReadFile(hMailSlot, pBuf, dwSize, &dwSize, NULL);
printf("%s\n", pBuf);
GetMailslotInfo(hMailSlot, 0, &dwSize, &dwCount, NULL);
delete[] pBuf;
}
}
return 0;
}