油槽

// 07 邮槽-服务端.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE 
        hSlot = CreateMailslot(L"\\\\.\\mailslot\\mail",
        0,
        MAILSLOT_WAIT_FOREVER,         // 无超时 
        (LPSECURITY_ATTRIBUTES)NULL);  // 安全属性
    while (true) {
        // 2.1 获取邮槽消息数量
        DWORD dwMsgCount = 0, dwMsgSize = 0;
        GetMailslotInfo(     /* 获取邮槽信息 */
            hSlot,                   // 邮槽句柄 
            (LPDWORD)NULL,// 无最大消息限制
            &dwMsgSize,      // 下一条消息的大小
            &dwMsgCount,     // 消息的数量
            (LPDWORD)NULL);// 无时限
        if (dwMsgSize == MAILSLOT_NO_MESSAGE) {
            Sleep(2000);
            continue;
        }
        else
        {
            // 2.2 循环获取全部消息(有可能不只一条)
            while (dwMsgCount)
            {
                PBYTE lpBuffer;
                lpBuffer = new BYTE[dwMsgSize + 0x10];
                // 读取邮槽中的信息
                DWORD dwRet;
                ZeroMemory(lpBuffer, dwMsgSize);
                if (!ReadFile(hSlot, lpBuffer, dwMsgSize, &dwRet, NULL))
                {
                    printf("ReadFile函数执行失败,错误码:%d.\n", GetLastError());
                    delete[] lpBuffer;
                    return 0;
                }
                // 显示信息
                printf("邮槽的内容: %s\n", lpBuffer);
                // 计算剩余的消息数
                GetMailslotInfo(hSlot, (LPDWORD)NULL, &dwMsgSize, &dwMsgCount, nullptr);
                delete[] lpBuffer;
                dwMsgCount--;
            }
        }
    }
    return 0;
}
// 07 邮槽-客户端.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE hMail = CreateFile(L"\\\\.\\mailslot\\mail", 
        GENERIC_WRITE,      // 读写属性
        FILE_SHARE_READ,       // 共享属性
        NULL,                       // 安全属性
        OPEN_EXISTING,      // 打开方式
        FILE_ATTRIBUTE_NORMAL,      // 标志位
        NULL);                     // 文件模板(默认留空)
    DWORD dwSize = 0;
    WriteFile(hMail, "Hello", 12, &dwSize, NULL);

    CloseHandle(hMail);

    return 0;
}

 

posted @ 2016-03-22 08:14  天还是那么蓝  阅读(264)  评论(0编辑  收藏  举报