1. 程式人生 > >77.郵槽通信

77.郵槽通信

email size exist amp value read char info printf

服務器端

  • 創建郵槽
    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("\n%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("\n%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 }

77.郵槽通信