邮槽mailslot通信学习

代码相关出处:《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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值