服务器端
创建邮槽
- // 名称, 数量 等待时间 安全属性
- HANDLE hmailslot = CreateMailslotA(MAILSLOT, 0, MAILSLOT_WAIT_FOREVER, NULL);
获取邮槽信息
- DWORD dxNextsize = 0;// 标识最大的数据大小
- DWORD dxmsgcount = 0;// 消息数量
- DWORD readcount = 0;// 读取成功的数量
- // 获取邮槽信息
- // 文件名 标记最大的数据大小 多少条消息 安全属性
- if (GetMailslotInfo(hmailslot, NULL, &dxNextsize, &dxmsgcount, NULL))
从邮槽读取一个数据
- // LPBYYE 的类型是 unsigned char *
- // 分配内存
- LPBYTE lpbuf = malloc(dxNextsize + 1);
- // 读取一行
- // 文件名 首地址 大小 读的个数
- ReadFile(hmailslot, lpbuf, dxNextsize, &readcount, NULL);
- printf("\n%s", lpbuf);
服务端负责显示
服务端完整代码
- #include
- #include
- #include
- // 定义邮槽
- #define MAILSLOT "\\\\.\\mailslot\\cgw"
- void main()
- {
- // 创建邮槽
- // 名称, 数量 等待时间 安全属性
- HANDLE hmailslot = CreateMailslotA(MAILSLOT, 0, MAILSLOT_WAIT_FOREVER, NULL);
- if (hmailslot == NULL)
- {
- printf("创建失败");
- }
- else
- {
- while (1)
- {
- system("pause");
- DWORD dxNextsize = 0;// 标识最大的数据大小
- DWORD dxmsgcount = 0;// 消息数量
- DWORD readcount = 0;// 读取成功的数量
- // 获取邮槽信息
- // 文件名 标记最大的数据大小 多少条消息 安全属性
- if (GetMailslotInfo(hmailslot, NULL, &dxNextsize, &dxmsgcount, NULL))
- {
- for (int i = 0; i < dxmsgcount;i++)
- {
- // LPBYYE 的类型是 unsigned char *
- // 分配内存
- LPBYTE lpbuf = malloc(dxNextsize + 1);
- // 读取一行
- // 文件名 首地址 大小 读的个数
- ReadFile(hmailslot, lpbuf, dxNextsize, &readcount, NULL);
- printf("\n%s", lpbuf);
- }
- }
- else
- {
- printf("error");
- }
- }
- }
- system("pause");
- }
客户端
打开邮槽
- // 第一个名称, 第二个写入, 第三个共享读, 打开已经存在
- HANDLE hmailslot = CreateFileA(MAILSLOT, 3 GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
向邮槽写入数据
- char str[10] = "123456789";
- scanf("%s", str);
- // 转化指针类型
- LPBYTE lpmsg = (LPBYTE)str;
- int wok = 0;
- // 写入信息, 第一个句柄, 第二个写入内存首地址, 第三个长度, 第四个写入成功保存 wok
- WriteFile(hmailslot, lpmsg,10,&wok,NULL);
关闭邮槽
1 CloseHandle(hmailslot);// 关闭
客户端完整代码
- #define _CRT_SECURE_NO_WARNINGS
- #include
- #include
- #include
- #define MAILSLOT "\\\\.\\mailslot\\cgw"
- //#define GENERIC_READ (0x80000000L)
- //#define GENERIC_WRITE (0x40000000L)
- //#define GENERIC_EXECUTE (0x20000000L)
- //#define GENERIC_ALL (0x10000000L)
- void main()
- {
- // 第一个名称, 第二个写入, 第三个共享读, 打开已经存在
- HANDLE hmailslot = CreateFileA(MAILSLOT, 17 GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
- if (hmailslot ==INVALID_HANDLE_VALUE)
- {
- printf("打开失败");
- }
- while (1)
- {
- char str[10] = "123456789";
- scanf("%s", str);
- // 转化指针类型
- LPBYTE lpmsg = (LPBYTE)str;
- int wok = 0;
- // 写入信息, 第一个句柄, 第二个写入内存首地址, 第三个长度, 第四个写入成功保存 wok
- WriteFile(hmailslot, lpmsg,10,&wok,NULL);
- }
- CloseHandle(hmailslot);// 关闭
- system("pause");
- }
来源: http://www.bubuko.com/infodetail-2501386.html