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;
}
上一篇下一篇

猜你喜欢

热点阅读