77.邮槽通信

服务器端

  • 创建邮槽
    1                                    //名称,数量    等待时间          安全属性
    2     HANDLE hmailslot = CreateMailslotA(MAILSLOT, 0, MAILSLOT_WAIT_FOREVER, NULL);
  • 获取邮槽信息
    1 DWORD dxNextsize = 0;//标识最大的数据大小
    2             DWORD dxmsgcount = 0;//消息数量
    3             DWORD readcount = 0;//读取成功的数量
    4 
    5             //获取邮槽信息
    6                                //文件名            标记最大的数据大小          多少条消息    安全属性
    7             if (GetMailslotInfo(hmailslot, NULL,    &dxNextsize,                &dxmsgcount, NULL))
  • 从邮槽读取一个数据 
    1                     //    LPBYYE 的类型是 unsigned char *
    2                     //分配内存
    3                     LPBYTE lpbuf = malloc(dxNextsize + 1);
    4                     //读取一行
    5                              //文件名   首地址   大小        读的个数
    6                     ReadFile(hmailslot, lpbuf, dxNextsize, &readcount, NULL);
    7                     printf("
    %s", lpbuf);

、服务端负责显示

服务端完整代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<Windows.h>
 4 
 5 //定义邮槽
 6 #define MAILSLOT "\\.\mailslot\cgw"
 7 
 8 
 9 void main()
10 {
11     //创建邮槽
12                                        //名称,数量    等待时间          安全属性
13     HANDLE hmailslot = CreateMailslotA(MAILSLOT, 0, MAILSLOT_WAIT_FOREVER, NULL);
14     if (hmailslot == NULL)
15     {
16         printf("创建失败");
17     }
18     else
19     {
20 
21         while (1)
22         {
23             system("pause");
24             DWORD dxNextsize = 0;//标识最大的数据大小
25             DWORD dxmsgcount = 0;//消息数量
26             DWORD readcount = 0;//读取成功的数量
27 
28             //获取邮槽信息
29                                //文件名            标记最大的数据大小          多少条消息    安全属性
30             if (GetMailslotInfo(hmailslot, NULL,    &dxNextsize,                &dxmsgcount, NULL))
31             {
32 
33                 for (int i = 0; i < dxmsgcount;i++)
34                 {
35                     //    LPBYYE 的类型是 unsigned char *
36                     //分配内存
37                     LPBYTE lpbuf = malloc(dxNextsize + 1);
38                     //读取一行
39                              //文件名   首地址   大小        读的个数
40                     ReadFile(hmailslot, lpbuf, dxNextsize, &readcount, NULL);
41                     printf("
%s", lpbuf);
42                 }
43             }
44             else
45             {
46                 printf("error");
47             }
48         }
49     }
50     system("pause");
51 }

客户端

  • 打开邮槽
    1 //第一个名称,第二个写入,第三个共享读,打开已经存在
    2     HANDLE hmailslot = CreateFileA(MAILSLOT, 
    3         GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
  • 向邮槽写入数据
    1 char str[10] = "123456789";
    2         scanf("%s", str);
    3         //转化指针类型
    4         LPBYTE lpmsg = (LPBYTE)str;
    5         int wok = 0;
    6         //写入信息,第一个句柄,第二个写入内存首地址,第三个长度,第四个写入成功保存wok
    7         WriteFile(hmailslot, lpmsg,10,&wok,NULL);
  • 关闭邮槽
    1 CloseHandle(hmailslot);//关闭

客户端完整代码

 1 #define  _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<Windows.h>
 5 
 6 #define MAILSLOT "\\.\mailslot\cgw"
 7 
 8 //#define GENERIC_READ                     (0x80000000L)
 9 //#define GENERIC_WRITE                    (0x40000000L)
10 //#define GENERIC_EXECUTE                  (0x20000000L)
11 //#define GENERIC_ALL                      (0x10000000L)
12 void main()
13 {
14 
15     //第一个名称,第二个写入,第三个共享读,打开已经存在
16     HANDLE hmailslot = CreateFileA(MAILSLOT, 
17         GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
18 
19     if (hmailslot ==INVALID_HANDLE_VALUE)
20     {
21         printf("打开失败");
22     }
23     while (1)
24     {
25         char str[10] = "123456789";
26         scanf("%s", str);
27         //转化指针类型
28         LPBYTE lpmsg = (LPBYTE)str;
29         int wok = 0;
30         //写入信息,第一个句柄,第二个写入内存首地址,第三个长度,第四个写入成功保存wok
31         WriteFile(hmailslot, lpmsg,10,&wok,NULL);
32         
33     }
34     CloseHandle(hmailslot);//关闭
35 
36     system("pause");
37 }
原文地址:https://www.cnblogs.com/xiaochi/p/8455180.html