现在的位置: 首页 > 综合 > 正文

邮槽mailslot通信学习

2017年12月11日 ⁄ 综合 ⁄ 共 1420字 ⁄ 字号 评论关闭

代码相关出处:《Windows网络编程技术》第3章 邮槽

邮槽为轻量级进程间通信应用。邮槽使用方便。

邮槽使用的缺点有如下两点。

  • 是不可靠传输。
  • 客户端向服务端单向数据通信。

邮槽服务端代码,IPCServer.cpp文件如下。

// IPCServer.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE Mailslot;
    char buffer[256];
    DWORD NumberOfBytesRead;

    //Create the mailslot
    //邮槽名中.表示本机为服务器
    Mailslot = CreateMailslot(_T("\\\\.\\Mailslot\\Myslot"), 0, MAILSLOT_WAIT_FOREVER, NULL);
    if (Mailslot == INVALID_HANDLE_VALUE)
    {
        printf("Failed to create a mailslot %d\n", GetLastError());
        return 0;
    }

    //ReadFile会一直等待,直到接受到信息
    while (ReadFile(Mailslot, buffer, 256, &NumberOfBytesRead,
        NULL) != 0)
    {
        printf("%.*s\n", NumberOfBytesRead, buffer);
    }

	return 0;
}

邮槽客户端代码,IPCClient.cpp文件如下。

// IPCClient.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE Mailslot;
    DWORD BytesWritten;

    /*
    \\\\.\\Mailslot\\Myslot说明本机既是服务器又是客户端
    客户端与服务端分离时,可写为\\\\服务器名称\\Mailslot\\Myslot

    CreateFile:可打开和创建文件、管道、邮槽、通信服务、设备以及控制台缓冲区
    */
    Mailslot = CreateFile(_T("\\\\.\\Mailslot\\Myslot"), GENERIC_WRITE, FILE_SHARE_READ,
        NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (Mailslot == INVALID_HANDLE_VALUE)
    {
        printf("CreateFile failed with error %d\n", GetLastError());
        return 0;
    }

    if (WriteFile(Mailslot, "This is a test", 14, &BytesWritten, NULL) == 0)
    {
        printf("WriteFile failed with error %d\n", GetLastError());
        return 0;
    }

    printf("Wrote %d bytes.\n", BytesWritten);

    CloseHandle(Mailslot);

	return 0;
}

抱歉!评论已关闭.